Patrząc przez źródła Elixir widzę, że mnożenie jest zdefiniowany następująco:Elixir Makro: Power ** Funkcja
@spec (number * number) :: number
def left * right do
:erlang.*(left, right)
end
chciałem zrobić ** funkcji do władzy jako ćwiczenie. Jednak gdy próbuję, otrzymuję wyjątek i nie mogę wymyślić, jak zrobić to poprawnie.
@spec (number ** number) :: number
def left ** right do
:math.pow(left, right)
end
zawsze zgłasza błąd jak:
** (SyntaxError) iex:7: syntax error before: '*'
Próbowałem czyniąc to makro, używając cytatu, używając: "**" zamiast **. Nie wiesz, dlaczego to nie zadziała ...
Jakieś pomysły?
Dało mi to jedno z tych aha! chwile wczoraj, myślałem, że rozumiem funkcjonalne dopasowywanie wzorców, ale jego głębsze niż dopasowanie argumentów, pasuje do partii! - Chciałem tylko podziękować :) –
'**' był kiedyś operatorem przeciążonym, ale został usunięty. To dlatego, że ludzie _expect_ używać go jako operatora 'pow', ale byłoby niemożliwe, aby użyć tej potęgowanie wewnątrz klauzul strażniczych. Wszystkie domyślne operatory eliksirów * są * dozwolone w klauzulach strażników, a gdy coś nie jest, może to być mylące dla ludzi. A więc: '**' został usunięty. – Qqwy