【发布时间】:2011-12-22 17:25:11
【问题描述】:
我正在学习 rails 并回到 ruby 以了解 rails 中的方法(以及 ruby 真正起作用)。当我看到这样的方法调用时:
validates :first_name, :presence => true
我很困惑。您如何在 ruby 中编写接受符号或哈希的方法。 validates 方法的源代码也很混乱。有人可以为我简化在 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")
这显然会引发错误。我试图理解:如果符号与任何其他值一样,为什么将这样的符号作为参数传递是错误的?
【问题讨论】:
-
符号和散列值与其他任何值一样 - 传递符号或散列值与其他任何东西没有什么不同。具体是什么让您感到困惑?
-
令我困惑的是,我从未见过在 ruby 方法中将哈希用作值的示例。所以我无法想象你在说什么。
-
你pass符号,参数名还是那个--参数名,不能有
:开头的字符。 -
啊!所以我愚蠢的问题的答案是,我不能在构造方法时将符号作为参数传递,但是当我调用它们时我可以。对吗?
-
正确。当你定义一个方法时,你没有传递任何东西。您正在命名调用此方法时将传递的参数。因此,在您的示例中,它只是: def full_name(first_name, last_name) 但这是一个不好的示例,因为您不会将名字和姓氏作为符号传递,而是将它们作为字符串传递,例如person.full_name("布鲁斯", "狄更斯")
标签: ruby-on-rails ruby symbols hash