簡體   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