ruby - 默认值与关键字参数

标签 ruby

谁能解释一下对参数使用默认值和使用关键字参数之间的区别?

默认值

def test1(var1, var2="2", var3=3)
  puts "#{var1} #{var2} #{var3}"
end

test1(1)         # => 1 2 3
test1(1, "2", 3) # => 1 2 3

关键字参数

def test2(var1, var2: "2", var3: 3)
  puts "#{var1} #{var2} #{var3}"
end

test2(1)         # => 1 2 3
test2(1, "2", 3) # => 1 2 3

我看不出它们之间有任何区别,但我觉得我遗漏了一些东西,因为我读过关键字参数是 ruby​​ 2.0 期待已久的功能

最佳答案

方法主体看起来非常相似,但主要区别在于调用方法的方式。

这两种方法都可以不带参数调用,因为您指定了默认值,所以调用这些方法的代码可能如下所示:

test1
test2

但是如果你想在调用方法时覆盖默认值,并将 var1 设置为 "foo",你需要这样写:

test1("foo")
test2(var1: "foo")

上面调用 test2 的行是语法糖:

test2({:var1 => "foo"})

要更改关键字参数,您必须将散列作为最后一个参数传入,并且散列的键之一必须是作为 Ruby 符号的关键字参数的名称。关键字参数的好处之一是您永远不必记住需要指定参数的顺序。

关于ruby - 默认值与关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368051/

相关文章:

ruby-on-rails - JWT 在 ruby​​ on rails 上过期 token

ruby : stack level too deep (SystemStackError) maxlimit

ruby-on-rails - 如何创建具有指示其他字段的类型字段的订单模型

ruby - 包括鞋中鞋套餐

ruby - Hash in Hash 给出错误的值作为返回?

ruby-on-rails - ActiveRecord 查询 : Accessing outer field in subquery

ruby-on-rails - 使用 constantize 在 ruby​​ 中远程执行代码

ruby-on-rails - rspec 期望只关心一个参数几次

ruby - 成功使用后和几天后的 RVM 'not found'

ruby - 求和 ruby​​ 哈希值