加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 默认情况下使选项为false

发布时间:2020-12-17 03:36:10 所属栏目:百科 来源:网络整理
导读:这是在 Ruby中设置默认值的常用方法: class QuietByDefault def initialize(opts = {}) @verbose = opts[:verbose] endend 这是一个容易陷入的陷阱: class VerboseNoMatterWhat def initialize(opts = {}) @verbose = opts[:verbose] || true endend 这是
这是在 Ruby中设置默认值的常用方法:

class QuietByDefault
  def initialize(opts = {})
    @verbose = opts[:verbose]
  end
end

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

class VerboseNoMatterWhat
  def initialize(opts = {})
    @verbose = opts[:verbose] || true
  end
end

这是一种正确的方法:

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

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

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

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

解决方法

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

class VerboseByDefault
  def initialize(opts = {})
    @verbose = opts.fetch(:verbose,true)
  end
end

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读