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

时间:2019-01-26 02:21:28

标签: ruby

我看到很多人在他们的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

1 个答案:

答案 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

这是一种事实编码标准,如果您遵循它,您的客户对您的代码进行审核就不会有问题。

该规则只有一个例外:如果您的方法需要确实个很难在参数列表中列出的不同的很少使用的选项,则只有这样值得使用选项哈希。但是,如果可能,应应避免