Ruby方法和多个默认值的排序
发布时间:2020-12-16 21:34:33 所属栏目:百科 来源:网络整理
导读:我似乎无法做到这一点(我以前在 Python中可以做到这一点).让我解释 .. 假设我在Ruby中有以下方法: def someMethod(arg1=1,arg2=2,arg3=3).........end 现在我可以这样称呼这种方法 someMethod(2,3,4)someMethod(2,3)someMethod(2) 并且参数是由它们各自的顺
我似乎无法做到这一点(我以前在
Python中可以做到这一点).让我解释 ..
假设我在Ruby中有以下方法: def someMethod(arg1=1,arg2=2,arg3=3) ... ... ... end 现在我可以这样称呼这种方法 someMethod(2,3,4) someMethod(2,3) someMethod(2) 并且参数是由它们各自的顺序进行的..但是如果我想在编程中的某个时刻给出arg2并且想要arg1和arg3的默认值呢? 我尝试编写someMethod(arg2 = 4),但这似乎不适用于Ruby 1.9.它做的是它仍然认为arg1是4.在python我至少可以逃脱这个,但在ruby中我不确定.有没有人有任何优雅的想法? 解决方法
现在只有优雅的解决方案是使用hash作为参数列表:
def some_method(options = {}) defaults = {:arg1 => 1,:arg2 => 2,:arg3 => 3} options = defaults.merge(options) ... end 后来在代码中使用隐式哈希调用方法时: some_method() some_method(:arg1 => 2,:arg2 => 3,:arg3 => 4) some_method(:arg2 => 4) 在Ruby 1.9中,您可以使用新的哈希键语法来更像Python: some_method(arg1: 2,arg2: 3,arg3: 4) 如果你想要更简单的语法并且仍然能够使用位置参数,那么我建议你玩这样的东西: def some_method(*args) defaults = {:arg1 => 1,:arg3 => 3} options = args.last.is_a?(::Hash) ? args.pop : {} options = defaults.merge(options) arg1 = args[0] || options[:arg1] arg2 = args[1] || options[:arg2] arg3 = args[2] || options[:arg3] ... end some_method() some_method(2) some_method(3,4,5) some_method(arg2: 5) some_method(2,arg3: 10) 如果您想模仿Ruby参数号检查方法,可以添加: fail "Unknown parameter name(s) " + (options.keys - defaults.keys).join(",") + "." unless options.length == defaults.length 编辑: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容