ruby中“=”&“=>”和“@variable”,“@@ variable”和“:variable”之间有什么区别?

我知道这些是rails的基础知识,但我仍然不知道= sign和=>之间的完全区别以及@some_variable@@some_variable:some_variable in rails之间的区别。

谢谢。

好。

==>运算符之间的区别在于第一个是赋值,第二个表示哈希(关联数组)中的关联。 所以{ :key => 'val' }说“创建一个关联数组,其中:key是键, 'val'是值”。 如果你想听起来像Rubyist,我们称之为“hashrocket”。 (信不信由你,这不是Ruby中最奇怪的操作员;我们也有<=>或“太空船操作员”。)

您可能会感到困惑,因为您可以在方法中使用一些快捷方式,如果最后一个参数是哈希,则可以省略波浪形括号( {} )。 所以调用render :partial => 'foo'基本上是调用render方法,传入一个带有单个键/值对的哈希。 因此,你经常会看到一个哈希作为最后一个具有穷人可选参数的参数(你也可以在JavaScript中看到类似的东西)。

在Ruby中,任何普通单词都是局部变量。 所以方法中的foo是一个作用于方法级别的变量。 使用@前缀变量意味着将变量作用于实例。 所以方法中的@foo是一个实例级别。

@@表示一个类变量,意味着@@变量在类的范围内,以及所有实例。

:表示符号。 Ruby中的符号是一种特殊的字符串,暗示它将用作键。 如果您来自C#/ Java,它们在枚举的关键部分使用时类似。 还有一些其他差异,但基本上任何时候你将字符串视为任何类型的键,你使用符号代替。

哇,这是一个很多不同的概念。

1) =是普通的旧任务。

 a = 4; puts a 

2) =>用于声明哈希值

 hash = {'a' => 1, 'b' => 2, 'c' => 3} puts hash['b'] # prints 2 

3) @var允许您访问对象实例变量。

 class MyObject def set_x(x) @x = x end def get_x @x end end o = MyObject.new o.set_x 3 puts o.get_x # prints 3 

4) @@var允许您访问类(’静态’)变量。

 class MyObject def set_x(x) @@x = x # now you can access '@@x' from other MyObject instance end def get_x @@x end end o1 = MyObject.new o1.set_x 3 o2 = MyObject.new puts o2.get_x # prints 3, even though 'set_x' was invoked on different object 

5)我通常认为:var是特殊的’标签’类。 示例2可以像这样重新表述

 hash = {:a => 1, :b => 2, :c => 3} puts hash[:b] # prints 2