【问题标题】:Dealing with 3 or more default arguments Ruby处理 3 个或更多默认参数 Ruby
【发布时间】:2019-04-22 05:59:11
【问题描述】:

我已经看到了一些在创建方法时传递默认参数的示例,但如果您只想替换第一个和第三个参数,它们似乎都没有解决......这是一个示例

def foo(a = 1, b = 2, c = 3)
    puts [a, b, c]
end

foo(1, 2) 
#=> [1, 2, 3]

当我尝试分配 a=5 和 c=7 并保持 b 的默认值时,如下所示:

foo(a=5,c=7) 

我明白了

=> 5,7,3

但我希望5,2,7

实现此目的的正确方法是什么?

【问题讨论】:

  • foo(a=5, c=7) 产生与a=5; c=7; foo(5, 7) 相同的结果。 Ruby 显然不知道您打算将57 分配给被调用方法中的局部变量ac,并将b 分配给它的默认值。她只能假设您已经传递了前两个变量ab 的值,并且c 将被赋予其默认值。除了使用命名参数之外,根本没有办法做到这一点。注意,执行方法时变量abc与方法中同名的局部变量无关。

标签: ruby methods arguments default


【解决方案1】:

使用关键字参数?

def foo(a: 1, b: 2, c: 3)
  puts [a, b, c]
end

foo(a: 5, c: 7) 

【讨论】:

    【解决方案2】:

    我见过一些在创建方法时传递默认参数的示例,但如果您只想替换第一个和第三个参数,它们似乎都没有解决...

    那是因为不可能。

    默认参数从左到右绑定。在回答这些问题时,我写了更多关于参数如何绑定到参数的内容:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多