[英]Elixir Macro: Power ** function
查看Elixir的源代碼,我看到乘法定義如下:
@spec (number * number) :: number
def left * right do
:erlang.*(left, right)
end
我想做一個**功能來鍛煉力量。 但是,當我嘗試時,出現異常,無法弄清楚如何正確執行操作。
@spec (number ** number) :: number
def left ** right do
:math.pow(left, right)
end
總是拋出錯誤,例如:
** (SyntaxError) iex:7: syntax error before: '*'
我嘗試使用unquote將其變成宏,使用:“ **”而不是**。 不知道為什么這不起作用...
有任何想法嗎?
二進制運算符是在Elixir中預定義的,這意味着Elixir解析器將僅解析一堆運算符(顯然包括*
)。 您可以在解析器的這一部分中大致看到運算符列表。 有一些“免費”運算符,即Elixir能夠解析但語言本身未使用的運算符(例如<~>
),但是**
不在其中。
只是為了說明可解析的運算符可以執行您想要的操作:
defmodule MyWeirdOperators do
def left <~> right do
:math.pow(left, right)
end
end
import MyWeirdOperators
3 <~> 4
#=> 81.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.