[英]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.