何时使用关键字参数和选项哈希



我看到很多人在Ruby代码中使用关键字参数。我也看到很多人使用选项散列。我应该什么时候使用关键字参数,什么时候使用选项哈希?这真的让我很困惑。从我所看到的情况来看,在很多情况下,关键字参数比选项哈希要好得多。例如:

class Foo
def initialize(kwarg1: nil, kwarg2: nil)
@var1 = kwarg1 if kwarg1
@var2 = kwarg2 if kwarg2
end
end

看起来比更好、更清晰

class Foo
def initialize(options = {})
@var1 = options[:var1] if options[:var1]
@var2 = options[:var2] if options[:var2]
end
end

《Ruby风格指南》中有一条规则:

Use keyword arguments instead of option hashes.
# bad
def some_method(options = {})
bar = options.fetch(:bar, false)
puts bar
end
# good
def some_method(bar: false)
puts bar
end

这是一个事实上的编码标准,如果你遵循它,你的客户对你的代码的审查永远不会有问题。

这个规则只有一个例外:如果您的方法需要真正大量不同的很少使用的选项,这些选项很难在参数列表中列出,只有这样才值得使用选项哈希。但如果可能的话,应避免出现这样的情况

最新更新