我不完全理解Ruby 2.0中的命名参数是如何工作的.
def test(var1, var2, var3)
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) #wrong number of arguments (1 for 3) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
它被视为哈希.这很有趣因为在Ruby 2.0中使用命名参数我必须为它们设置默认值:
def test(var1: "var1", var2: "var2", var3: "var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok => 1111 2222 var3-new
Run Code Online (Sandbox Code Playgroud)
这与Ruby之前使用默认参数值的行为非常相似:
def test(var1="var1", var2="var2", var3="var3")
puts "#{var1} #{var2} #{var3}"
end
test(var3:"var3-new", var1: 1111, var2: 2222) # ok but ... {:var3=>"var3-new", :var1=>1111, :var2=>2222} var2 var3
Run Code Online (Sandbox Code Playgroud)
我知道为什么会这样,几乎是如何运作的.
但我只是好奇,如果我使用命名参数,我必须使用参数的默认值吗?
并且,有人可以告诉我这两者之间有什么区别吗? …
如何像rails一样声明一个带有关键字参数的方法.一些例子可能是
Person.find(:all, :conditions => "...").
Run Code Online (Sandbox Code Playgroud)
如何使用符号创建类似于上述的方法?
我对红宝石很新.提前致谢!
我正在学习rails并回到ruby来理解rails中的方法(以及ruby真正起作用).当我看到方法调用时:
validates validates :first_name, :presence => true
Run Code Online (Sandbox Code Playgroud)
我有点迷惑不解了.你如何在ruby中编写接受符号或哈希的方法.验证方法的源代码也令人困惑.请问有人可以简化在ruby类和实例方法中使用符号作为参数的主题吗?
更新:
好的@Dave!但我尝试的是:
def full_name (:first_name, :last_name)
@first_name = :first_name
@last_name = :last_name
p "#{@first_name} #{last_name}"
end
full_name("Breta", "Von Sustern")
Run Code Online (Sandbox Code Playgroud)
这显然会引发错误.我试图理解:如果符号与任何其他值一样,为什么将这样的符号作为参数传递错误?