Wann wird empfohlen, den Bereich s: und das Argument abort zu verwenden, um eine Funktion zu definieren?

7

Wird beim Definieren einer Funktion immer empfohlen, den Bereich s:zu verwenden, um sie lokal für das Skript zu machen und zu vermeiden, dass eine Funktion mit demselben Namen im globalen Namespace überschrieben wird.
Und wird immer empfohlen, das Argument abortzu verwenden, wenn die Funktion einen Fehler erkennt?

function! s:SomeFunction() abort
    echo "hello world!"
endfunction

Der Bereich s:scheint eine gute Sache zu sein, aber er macht den Code etwas ausführlicher, da ich ihm jedes Mal, wenn ich SomeFunction()von einem Mapping aus aufrufen möchte, Folgendes voranstellen muss <SID>:

nnoremap {lhs} :<c-u>call <SID>SomeFunction()<cr>

Oder sogar, um seine Ausgabe in einer Variablen zu speichern:

let myvar = <SID>SomeFunction()

Gibt es bestimmte Fälle, in denen Sie s:und / oder nicht verwenden möchten abort?
Wenn ja, aus welchen Gründen?

saginaw
quelle

Antworten:

6

Das s:bedeutet einfach, dass Sie den globalen Namespace nicht verschmutzen. Normalerweise würden Sie dies tun, wenn es sich um eine Funktion handelt, die vom Benutzer nicht aufgerufen werden muss. In abortBezug auf die Flagge :help :func-abortsagen die Dokumente Folgendes:

Wenn das Argument [abort] hinzugefügt wird, wird die Funktion abgebrochen, sobald ein Fehler erkannt wird.

Wenn Ihre Funktion keine Einstellungen vornimmt und nichts kaputt macht, wenn sie sich bei Auftreten eines Fehlers nicht selbst abreißen kann, ist es wahrscheinlich in Ordnung, sie zu verwenden. (das heißt, wenn Sie stillschweigend abbrechen möchten, wenn ein Fehler auftritt)

Immergrüner Baum
quelle
Ich würde denken, dass die beste Vorgehensweise darin besteht, immer abortein try/ finallyfür jeden erforderlichen Abriss zu verwenden. Ist das nicht der Fall?
Ivan