通过Elixir源我看到乘法定义如下:
@spec (number * number) :: number
def left * right do
:erlang.*(left, right)
end
Run Code Online (Sandbox Code Playgroud)
我想做一个**功能来做力量作为练习.但是,当我尝试时,我得到一个例外,我无法弄清楚如何正确地做到这一点.
@spec (number ** number) :: number
def left ** right do
:math.pow(left, right)
end
Run Code Online (Sandbox Code Playgroud)
总是抛出一个错误:
** (SyntaxError) iex:7: syntax error before: '*'
Run Code Online (Sandbox Code Playgroud)
我尝试使用unquote将其设为宏,使用:"**"而不是**.不知道为什么这不起作用......
有任何想法吗?
wha*_*ide 12
二进制运算符是在Elixir中预定义的,这意味着Elixir解析器将只解析一堆运算符(显然,包括*
).您可以在解析器的此部分中大致看到运算符列表.有一些"免费"运算符,即Elixir能够解析但不被语言本身使用的运算符(例如<~>
),但**
不在其中.
只是为了表明可解析的运算符可以做你想要的:
defmodule MyWeirdOperators do
def left <~> right do
:math.pow(left, right)
end
end
import MyWeirdOperators
3 <~> 4
#=> 81.0
Run Code Online (Sandbox Code Playgroud)