默认情况下将选项设为false

Dav*_* J. 5 ruby options

这是在Ruby中设置默认值的常用方法:

class QuietByDefault
  def initialize(opts = {})
    @verbose = opts[:verbose]
  end
end
Run Code Online (Sandbox Code Playgroud)

这是一个容易陷入的陷阱:

class VerboseNoMatterWhat
  def initialize(opts = {})
    @verbose = opts[:verbose] || true
  end
end
Run Code Online (Sandbox Code Playgroud)

这是一种正确的方法:

class VerboseByDefault
  def initialize(opts = {})
    @verbose = opts.include?(:verbose) ? opts[:verbose] : true
  end
end
Run Code Online (Sandbox Code Playgroud)

什么是最好/最干净的编码方式VerboseByDefault?(当然,我可以将其考虑在内.)

一般来说,在Ruby代码中广泛使用哪种模式(如果有的话)?ActiveSupport是否有这种模式?(最小值更好 - 我不需要完整的命令行选项解析器.)

Ranting PS:我不喜欢处理默认true代码的代码与处理默认false选项的代码之间的不对称性.在两者之间进行更改的模式 - 不会导致错误 - 将是一件好事.

Tim*_*ers 7

一个简单的方法是使用Hash #fetch的第二个参数

class VerboseByDefault
  def initialize(opts = {})
    @verbose = opts.fetch(:verbose, true)
  end
end
Run Code Online (Sandbox Code Playgroud)

对于复杂的默认值,fetch也可以使用一个块,如果该值不在哈希值中,则执行该块.请参阅:http://ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch