Elixir Macro:Power**功能

mgw*_*ann 9 macros elixir

通过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)