我是 Ruby 的新手,我见过构造函数以几种不同的方式完成,我很好奇哪种方式更地道?这些是我见过的 2 个最常见的变体:
直接赋值:
class Foo
attr_accessor :id
attr_accessor :name
def initialize(id, name)
@id = id
@name = name
end
end
哈希传递:
class Foo
attr_accessor :id
attr_accessor :name
def initialize(options)
@id = options[:id]
@name = options[:name]
end
end
哪个是最惯用的,或者是否有我未在此处介绍的替代方法?
最佳答案
方法签名的数量
您所说的“直接赋值”实际上只是一个带有位置参数的方法签名。从哈希参数赋值是你在遗留代码中经常看到的东西,因为 2.0 版之前的 Ruby 解释器没有 keyword arguments。 ,而选项哈希是模拟它们的好方法。
两者都不是更惯用的;每个都有不同的用例。通常,当您想强制执行方法的元数时,位置参数更好,而当您想避免复杂的、依赖于顺序的签名并愿意自己处理 nils 和元数问题时,选项哈希更好。
使用显式签名以确保清晰度
如果您使用的是 Ruby 2.0 或更高版本,我建议坚持使用位置参数或关键字参数以使您的方法签名明确。作为一个额外的好处,具有良好变量名的显式签名减少了您需要编写的文档量; RDoc 等工具将很好地记录表达签名,但选项哈希很少是不言自明的。
关于ruby - 哪个更地道 : positional arguments or option hashes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204952/