我看到很多人在他们的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
答案 0 :(得分:4)
The Ruby Style Guide中有一条规则可以实现:
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
这是一种事实编码标准,如果您遵循它,您的客户对您的代码进行审核就不会有问题。
该规则只有一个例外:如果您的方法需要确实个很难在参数列表中列出的不同的很少使用的选项,则只有这样值得使用选项哈希。但是,如果可能,应应避免。