Questo mi tiene sveglio la notte per un po '.Come è consentita la sintassi dell'alias di Ruby?
class Foo
def bar
'bar'
end
# What the hell is going on here?!?
alias :baz :bar
end
Foo.new.baz #=> 'bar'
Perché alias
prendere 2 simbolo come argomenti, ma senza una virgola che li separa? Non sembra essere alcuna forma di sintassi valida in nessun altro contesto. In effetti, se si utilizza una virgola, in realtà genera un errore di sintassi.
alias :bar, :baz
# syntax error, unexpected ','
Tuttavia, se provo a passare 2 simbolo con lo stesso modo di mio metodo, esplode anche:
def somemethod(*args)
:whatever
end
somemethod :a :b
# syntax error, unexpected ':', expecting $end
- Allora, perché è il metodo
alias
arrivare a utilizzare una sintassi nulla altro da usare? - È possibile utilizzare questa sintassi in qualsiasi altro contesto?
- Qual è il vantaggio di utilizzare questa stranezza della sintassi dispari, quando nient'altro nella lingua funziona in questo modo? Non vedo alcun beneficio visibile a questa incoerenza linguistica.
Quindi, poiché si tratta di una parola chiave, è consentita una sintassi speciale che è codificata nell'interprete proprio in questo caso? Quel tipo di odori. –
@Alex, sì, è hardcoded nell'interprete.C'è una buona ragione per alcune esigenze di programmazione perché puoi essere sicuro che l'alias avviene al momento della lettura, non in fase di runtime. – joelparkerhenderson
@AlexWayne: Lo stesso si può dire della parola chiave 'else' o della parola chiave 'case'. Pensi davvero che sia un odore di design per le parole chiave avere le loro specifiche sintassi? Ti sfido a trovare qualsiasi linguaggio di programmazione di alto livello in cui nessuna parola chiave abbia la propria sintassi e tutti si comportano esattamente come le chiamate di metodo. – Jazz