Co oznacza znak zapytania w składni Erlanga?Erlang: Co oznacza składnia znaku zapytania?
Na przykład
Json = ?record_to_json(artist, Artist).
pełnego kontekstu źródła znaleźć można here.
Co oznacza znak zapytania w składni Erlanga?Erlang: Co oznacza składnia znaku zapytania?
Na przykład
Json = ?record_to_json(artist, Artist).
pełnego kontekstu źródła znaleźć można here.
Erlang używa znaku zapytania do identyfikacji macros. Dla np. rozważyć poniższy kod:
-ifdef(debug).
-define(DEBUG(Format, Args), io:format(Format, Args)).
-else.
-define(DEBUG(Format, Args), void).
-endif.
Jako dokumentacja mówi,
Makra są rozszerzane podczas kompilacji. Proste makro
?Const
zostanie zastąpione przezReplacement
.
Ten fragment definiuje makro o nazwie DEBUG
że jest zastępowany zaproszenia do wydrukowania ciąg jeśli debug
jest ustawiony w czasie kompilacji. Makro jest następnie wykorzystywany w następującym kodzie tak:
?DEBUG("Creating ~p for N = ~p~n", [First, N]),
To stwierdzenie jest rozszerzona i zastąpione odpowiednimi zawartości jeśli debug
jest ustawiony. Dlatego wyświetlane są komunikaty debugowania tylko wtedy, gdy ustawiono debug
.
Aktualizacja
Dzięki @rvirding:
Znak zapytania oznacza spróbować poszerzyć co następuje jako makro nazwać. Nie ma nic, co zabrania używania nazwy makra (atomu lub zmiennej) jako normalnego atomu lub zmiennej. Tak więc w powyższym przykładzie możesz użyć
DEBUG
jako normalnej zmiennej tak długo, jak długo nie poprzedzasz jej prefiksem?
. Mylące, zdecydowanie, ale nie nielegalnie.
Aby być wybrednym: znak zapytania oznacza próbę rozszerzenia co następuje jako połączenie makro. Nie ma nic, co zabrania używania nazwy makra (atomu lub zmiennej) jako normalnego atomu lub zmiennej. Tak więc w twoim przykładzie możesz użyć 'DEBUG' jako normalnej zmiennej tak długo, jak długo nie poprzedzasz jej' ''. Mylące, zdecydowanie, ale nie nielegalnie. – rvirding
@rvirding: Thanks! Zawiedziłem go bezwstydnie i dodałem do mojej odpowiedzi. –
Na podstawie this documentation, uważam, że jest to składnia odnosząca się do makra.
I od Learn You Some Erlang:
makra Erlang są bardzo podobne do c jest '#define' wypowiedzi, używany głównie zdefiniować krótkie funkcje i stałe. Są to proste wyrażenia reprezentowane przez tekst, który będzie zastąpiony przed skompilowaniem kodu dla maszyny wirtualnej. Takie makra są głównie przydatne do uniknięcia magicznych wartości unoszących się wokół twoich modułów. Makro jest zdefiniowane jako atrybut modułu w postaci: -define (MACRO, some_value). i jest używany jako? MAKRO w dowolnej funkcji zdefiniowanej w module . Makro "funkcja" może być zapisane jako -define (pod (X, Y), X-Y). i używane jak? sub (2347), później zastąpione przez 23-47 przez kompilator. Niektórzy ludzie używają bardziej złożonych makr, ale podstawowa składnia pozostaje taka sama.
Używane Google, ale nie wymyślił niczego (dla: "składnia znaków zapytania Erlanga"). Może powinienem aktywować historię online lub coś, co pozwoli uzyskać bardziej trafne wyniki (nawet przy użyciu tych samych słów kluczowych wyniki nie są takie same dla wszystkich, szczególnie w przypadku bardziej specyficznych słów kluczowych). ale dzięki za komentarz ... nadal byłbym wdzięczny komuś z doświadczeniem erlangu dostarczającym nieco wnikliwego kontekstu na temat tego, jak i dlaczego ... –
@delnan - Googling wywołuje to pytanie – OrangeDog