Elixir 宏:Power ** 函数
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: '*'
我试着把它变成一个宏,使用反引号,使用 :"**" 而不是 **。不确定为什么这不起作用...
有什么想法吗?
二元运算符是在 Elixir 中预定义的,这意味着 Elixir 解析器只会解析一堆运算符(显然,其中包括 *
)。您可以在解析器的 this section 中大致看到运算符列表。有一些 "free" 运算符,即 Elixir 能够解析但语言本身不使用的运算符(例如 <~>
),但 **
不在其中。
只是为了表明可解析运算符可以做你想做的事:
defmodule MyWeirdOperators do
def left <~> right do
:math.pow(left, right)
end
end
import MyWeirdOperators
3 <~> 4
#=> 81.0
Elixir 没有 **
运算符。您不能在不更改和重新编译至少 the Elixir parser and the Macro
module.
的情况下定义新的中缀运算符
查看 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: '*'
我试着把它变成一个宏,使用反引号,使用 :"**" 而不是 **。不确定为什么这不起作用...
有什么想法吗?
二元运算符是在 Elixir 中预定义的,这意味着 Elixir 解析器只会解析一堆运算符(显然,其中包括 *
)。您可以在解析器的 this section 中大致看到运算符列表。有一些 "free" 运算符,即 Elixir 能够解析但语言本身不使用的运算符(例如 <~>
),但 **
不在其中。
只是为了表明可解析运算符可以做你想做的事:
defmodule MyWeirdOperators do
def left <~> right do
:math.pow(left, right)
end
end
import MyWeirdOperators
3 <~> 4
#=> 81.0
Elixir 没有 **
运算符。您不能在不更改和重新编译至少 the Elixir parser and the Macro
module.