相关疑难解决方法(0)

Ruby 2中的命名参数

我不完全理解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)

我知道为什么会这样,几乎是如何运作的.

但我只是好奇,如果我使用命名参数,我必须使用参数的默认值吗?

并且,有人可以告诉我这两者之间有什么区别吗? …

ruby ruby-2.0

39
推荐指数
6
解决办法
7万
查看次数

方法的ruby关键字参数

如何像rails一样声明一个带有关键字参数的方法.一些例子可能是

Person.find(:all, :conditions => "..."). 
Run Code Online (Sandbox Code Playgroud)

如何使用符号创建类似于上述的方法?

我对红宝石很新.提前致谢!

ruby

18
推荐指数
3
解决办法
7023
查看次数

使用符号作为ruby方法的参数

我正在学习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)

这显然会引发错误.我试图理解:如果符号与任何其他值一样,为什么将这样的符号作为参数传递错误?

ruby hash symbols ruby-on-rails

14
推荐指数
3
解决办法
3万
查看次数

标签 统计

ruby ×3

hash ×1

ruby-2.0 ×1

ruby-on-rails ×1

symbols ×1