如何判断某个函数是否缺少一个参数,或者它是否存在?

时间:2015-11-14 07:44:55

标签: elixir

我可能有一个愚蠢的问题。来自Ruby背景,如果我忘记了方法的一些必需参数,解释器将抛出一个缺失的参数错误,我会知道这是一个小错误。

因为我还是Elixir的新手,所以当定义了Random.some_function / 3时,我会得到未定义的函数Random.some_function / 2,但我碰巧忘了。

除了使用Google搜索或查看文档外,还有更快捷的方法可以找到答案吗?好奇。

2 个答案:

答案 0 :(得分:2)

与Elixir不同, Ruby 不支持Method overloading,并且在方法查找链中仅使用唯一名称维护一个方法。因此,它可以指向与缺失参数相关的错误。

下面是一个Ruby示例,它显示我们定义具有相同名称的另一个函数时,我们将丢失该函数的先前定义。

def test(param)
    p param
end

test() #=> wrong number of arguments (0 for 1) (ArgumentError)

def test(param_1, param_2)
    p param_1, param_2
end

test("A") #=> wrong number of arguments (1 for 2) (ArgumentError)

相反,在 Elixir 中,函数由其包含的模块,其名称和arity唯一标识。具有相同名称但不同arities的两个函数是两个不同的函数。以下是one example

defmodule Rectangle do
  def area(a), do: area(a, a)
  def area(a, b), do: a * b
end

IO.inspect Rectangle.area(2)      
#=> 4

IO.inspect Rectangle.area(2, 4)   
#=> 8

IO.inspect Rectangle.area()       
#=> ** (UndefinedFunctionError) undefined function: Rectangle.area/0

现在,如果你尝试在没有任何参数的情况下调用Rectangle.area,Elixir只能抱怨0 arity的函数不存在,但它无法弄清楚两个Rectangle.area方法中的哪一个你打算调用。可能是一个Elixir IDE(将来)可以帮助解决这种情况,但是目前,似乎必须查找文档/代码来找出函数的正确性。

答案 1 :(得分:0)

在iex终端中,您可以使用h关键字来显示所需功能的文档。这将适用于在语法中定义 doc 或文档的所有函数。示例

h Enum.reduce

相关问题