繁体   English   中英

Elixir Macro: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: '*'

我尝试使用unquote将其变成宏,使用:“ **”而不是**。 不知道为什么这不起作用...

有任何想法吗?

二进制运算符是在Elixir中预定义的,这意味着Elixir解析器将仅解析一堆运算符(显然包括* )。 您可以在解析器的这一部分中大致看到运算符列表。 有一些“免费”运算符,即Elixir能够解析但语言本身未使用的运算符(例如<~> ),但是**不在其中。

只是为了说明可解析的运算符可以执行您想要的操作:

defmodule MyWeirdOperators do
  def left <~> right do
    :math.pow(left, right)
  end
end

import MyWeirdOperators
3 <~> 4
#=> 81.0

Elixir没有**运算符。 您必须至少更改和重新编译Elixir解析器Macro模块才能定义新的infix运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM