2

我刚开始在 Rails 上学习 ruby​​,我想知道什么时候应该使用“=>”以及什么时候应该使用“=”进行赋值。我看到您使用“=>”作为哈希,为迁移中的符号分配值,但我不确定在哪里画线。

谢谢!

4

3 回答 3

7

=>符号仅用于哈希。Ruby 有一个特性,可以将散列作为最后一个参数传递给方法调用,而无需包含大括号。这提供了类似于关键字参数的东西(尽管在 Ruby 2.0 之前,Ruby 没有关键字参数)。

所以当你看到这个:

t.integer :foo, :default => 5

它的真正含义是:

t.integer(:foo, { :default => 5 })

其余的只是为了让它看起来更好而设计的语法糖。

=另一方面,符号是您在几乎任何编程语言中都知道和喜爱的赋值运算符。

于 2013-03-16T06:42:57.650 回答
0

=> 与赋值不同,但我明白它为什么会令人困惑。在散列中,您创建一个键和一个值作为一对。键和值可以是任何东西

{'key1' => 'some value', :symbol_key => 'other value'}

这与分配不同,您可以清楚地看到,因为如果您希望上述哈希对您的程序保持可用,您必须将其传递给方法或将其分配给变量

myhash = {'key1' => 'some value', :symbol_key => 'other value'}

只有现在你才能从你的哈希中检索东西

puts myhash['key1']

所以 => 运算符实际上是用来构造散列(或字典对象)的,赋值允许你在程序中存储值。

Rails(因此在迁移中)很常见的情况是,正在创建哈希并将其传递给方法调用,而您却没有意识到这一点。但是管道仍然是一样的,它仍然只是一个创建的哈希。

在 Ruby 1.9 中,您现在可以使用类似 javascript 的语法定义散列,因此您可能也会开始看到这一点。

myhash = {key1: 'some value', key2: 'other value'}
于 2013-03-16T13:49:43.363 回答
0

我为此苦苦挣扎了一段时间,但现在更喜欢尽可能使用新样式的哈希

t.integer :foo, default: 5
t.string :bar, default: 'Dave'
于 2013-03-16T11:36:52.093 回答