Guardando attraverso la fonte Elisir Vedo che la moltiplicazione è definita in questo modo:Elixir Macro: Potenza ** funzione
@spec (number * number) :: number
def left * right do
:erlang.*(left, right)
end
ho voluto fare una funzione ** per fare il potere come esercizio. Tuttavia, quando provo, ottengo un'eccezione e non riesco a capire come farlo correttamente.
@spec (number ** number) :: number
def left ** right do
:math.pow(left, right)
end
tiri sempre un errore del tipo:
** (SyntaxError) iex:7: syntax error before: '*'
Ho provato a fare una macro, utilizzando unquote, utilizzando: "**" invece di **. Non sei sicuro del motivo per cui questo non funziona ...
Qualche idea?
Questo mi ha dato uno di quegli aha! Momenti di ieri, pensavo di aver capito l'abbinamento funzionale dei pattern, ma è più profondo degli argomenti corrispondenti, si abbina perfettamente! - Volevo solo dire grazie :) –
'**' usato per essere un operatore sovraccarico, ma è stato rimosso. Questo perché le persone _expect_ lo usano come un operatore 'pow', ma sarebbe impossibile usare questo esponenziale all'interno delle clausole di guardia. Tutti gli operatori elisir predefiniti * sono * ammessi nelle clausole di guardia e, quando qualcosa non lo è, potrebbe essere fonte di confusione per le persone. Quindi: '**' è stato rimosso. – Qqwy