In welcher Sprache ist es ein „Wächter“ Stichwort oder Konzept?
-
24-09-2019 - |
Frage
Ich habe versucht, vor kurzem ein C ++ Programm zu verstehen, die von jemandem geschrieben wurden, den ich einen Hintergrund in der funktionalen Programmierung hatte annehmen: Zum Beispiel hat er eine Schließung erklärt Klasse, die er ausgiebig genutzt und die etwas nicht ähneln, was als Verschluss in der funktionalen Programmierung bekannt ist. Eine weitere Klasse wurde ein Wächter genannt, aber ich habe noch nicht ganz herausgefunden, was es gut ist. Es scheint eine Art Bereinigung Funktionalität zu haben, um es angebracht ist.
Die einzige Sprache, in der ich ein Konzept namens gesehen habe Wächter ist Erlang, aber das entfernt ähnlich sieht nicht auf den Code fand ich. In dem, was anderen Sprachen tut ein solches Konzept exist, dass der Autor des C ++ Code erwähnt haben?
Lösung
Für mich klingt es wie er RAII verwenden.
Die Klasse Konstruktor / Destruktor symetrisch verwendet wird, irgendeine Form von Ressourcenzuweisung Griff / Veröffentlichung einer Ausnahme sicher Kontext (Was Java-Programmierer schließlich nennen würde {} als der Destruktor aufgerufen werden soll guranteed.).
Dies ist eine sehr häufige C ++ Idiom und ued ausgiebig in der modernen C ++.
Bitte benutzen Sie den Code wie folgt aussehen:
void Plop()
{
Guard guard(lock);
// Do lots of stuff
}
Hier ist der Schutz ist das Schloss im Konstruktor Sperren und das Schloss in dem destructor zu entriegeln.
Andere Tipps
Der Begriff „Schutz“ wird verwendet, in mehrere funktionalen Sprachen , wie es wird in Erlang verwendet, aber, dass die Nutzung scheint nicht Ihre Beschreibung zu passen. Ohne zu sehen, die C ++ Code ist es schwer, wirklich zu wissen, was es beabsichtigt war.
Eine Vermutung von Ihrer Beschreibung wäre, dass es so etwas wie Haskell implementiert
Im Allgemeinen ein Wächter ist einfach ein Konstrukt, das entlang einer gewissen Weg zur Ausführung auf true bewerten muss fortgesetzt werden. So oder so, wie es existiert in alle nützlich Turing-complete Programmiersprachen, aber ist vielleicht so grundlegend, dass oft nicht separat als Einheit genannt. Hier ist ein einfaches Beispiel in Haskell: Dies ist äquivalent zu der Absolutwert-Funktion: eine Anzahl negieren, wenn es negativ sein positives Gegenstück zu erzeugen; ansonsten den gleichen Wert zurück übergeben Es gibt zwei Wachen hier:.. f x
| x < 0 = -x
| otherwise = x
x < 0
, was wahr ist, wenn x kleiner als Null ist, und otherwise
, die immer wahr ist
Haskells Control.Monad Modul hat guard
:
guard :: MonadPlus m => Bool -> m ()
guard b
istreturn ()
wennb
True
ist, undmzero
wennb
False
ist.
Zum Beispiel Pythagoreische Tripel zu berechnen, wobei jedes Bein ist nicht mehr als 25, können Sie
verwendentriples = do
a <- [1..25]
b <- [a..25]
c <- [b..25]
guard (p a b c)
return (a,b,c)
where
p a b c = a*a + b*b == c*c
Für eine Erklärung dessen, was los ist, finden Sie in meinem Blog-Post A programmierbare Semikolon erklärt .
Guards in der Informatik beziehen sich typischerweise auf dem Booleschen Ausdruck, der angibt, dass ein Schleifenkonstrukt fortgesetzt werden sollte. Zum Beispiel (pardon das Wortspiel)
for (int i = 0; i < N; ++i)
/* stuff */
Hier i < N
ist der Wächter.
Es ist schwierig, Ihre Frage gründlichen ohne weitere Informationen zu beantworten.