如何判断一个函数是否缺少参数或者它是否存在?
How to tell if a function is missing an argument or if it even exists?
我可能有一个愚蠢的问题。来自 Ruby 的背景,如果我忘记了一个方法的一些必需参数,解释器将抛出一个缺少参数的错误,我会知道这是一个小的快速错误。
因为我还是 Elixir 的新手,我会得到未定义的函数 Random.some_function/2 可能是 Random.some_function/3 被定义了,但我碰巧忘记了。
除了谷歌搜索或查看文档之外,还有更快捷的查找方法吗?只是好奇。
在 iex 终端中,您可以使用 h
关键字来显示所需功能的文档。这将适用于在语法中定义了 doc 或文档的所有函数。示例
h Enum.reduce
与 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 中,函数由其包含的模块、名称和参数唯一标识。两个同名不同元数的函数是两个不同的函数。下面是 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 只能抱怨 arity 为 0 的函数不存在,但它不可能弄清楚这两个 Rectangle.area
您打算调用的方法。可能是 Elixir IDE(将来)可以帮助解决这种情况,但目前,似乎必须查找 documentation/code 才能找出函数的正确数量。
我可能有一个愚蠢的问题。来自 Ruby 的背景,如果我忘记了一个方法的一些必需参数,解释器将抛出一个缺少参数的错误,我会知道这是一个小的快速错误。
因为我还是 Elixir 的新手,我会得到未定义的函数 Random.some_function/2 可能是 Random.some_function/3 被定义了,但我碰巧忘记了。
除了谷歌搜索或查看文档之外,还有更快捷的查找方法吗?只是好奇。
在 iex 终端中,您可以使用 h
关键字来显示所需功能的文档。这将适用于在语法中定义了 doc 或文档的所有函数。示例
h Enum.reduce
与 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 中,函数由其包含的模块、名称和参数唯一标识。两个同名不同元数的函数是两个不同的函数。下面是 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 只能抱怨 arity 为 0 的函数不存在,但它不可能弄清楚这两个 Rectangle.area
您打算调用的方法。可能是 Elixir IDE(将来)可以帮助解决这种情况,但目前,似乎必须查找 documentation/code 才能找出函数的正确数量。