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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |