我目前正在学习Ruby和RoR,我偶然发现了这个声明:
link_to_remote(name, options = {}, html_options = nil)
我发现这个模式用于其他几个Rails函数。
为什么默认值是这样定义的?为什么不是这两个中的一个?
... options = {}, html_options = {})
... options = nil, html_options = nil)
这是我在自己的职能中应遵循的某种惯例吗?
答案 0 :(得分:1)
方法定义如下:
link_to_function(name, remote_function(options), html_options || options.delete(:html))
这允许您将html_options
指定为options
哈希的一部分,而不是单独的参数。另一方面,options
哈希总是传递给remote_function
,所以我们需要它。
使用单例nil而不是构造一个每次调用方法时都不会使用的数组也更有效。我不会说这个理由如此引人注目,以至于我不会使用{}如果它使得结果代码更清晰,但在没有任何其他考虑的情况下,这似乎是合乎逻辑的事情。
答案 1 :(得分:0)
不是专家,但对于options
,可能是因为调用代码使用merge
方法将传入的任何内容与假定的默认值组合在一起;将其设置为nil
只会删除所有选项。我不确定html_options
,但它可能与此类似。
html_options
可能会调用一个块并定义一些内容来检查是否给出了哈希值。就像我说我不是专家,但这可能就是原因。我刚刚检查了一个Ubuntu VM,根据irb,空哈希计算结果为true
,这可能就是原因。调用代码可能使用带有某行的块:
if html_options
# do stuff
end
默认情况下它是nil
,因为代码会执行,并且可能会在空哈希时给你一个nil错误