我知道这些是rails的基础知识,但我仍然不知道=
符号和=>
之间的完全差异以及@some_variable
,@@some_variable
和:some_variable
之间的差异在rails中{{1}}。
感谢。
答案 0 :(得分:18)
行。
=
和=>
运算符之间的区别在于第一个是赋值,第二个表示哈希(关联数组)中的关联。所以{ :key => 'val' }
说“创建一个关联数组,:key
是关键,'val'
是值”。如果你想听起来像Rubyist,我们称之为“hashrocket”。 (信不信由你,这不是Ruby中最奇怪的操作符;我们也有<=>
或“太空船操作员”。)
您可能会感到困惑,因为您可以在方法中使用一些快捷方式,如果最后一个参数是哈希,则可以省略波浪括号({}
)。所以调用render :partial => 'foo'
基本上是调用render方法,传入一个带有单个键/值对的哈希。因此,你经常会看到一个哈希作为最后一个具有穷人可选参数的参数(你也可以在JavaScript中看到类似的东西)。
在Ruby中,任何普通单词都是局部变量。因此,方法内的foo
是一个作用于方法级别的变量。使用@
前缀变量意味着将变量作用于实例。所以方法中的@foo
是实例级别。
@@
表示一个类变量,意味着@@
变量在类的范围内,以及所有实例。
:
表示符号。 Ruby中的符号是一种特殊的字符串,暗示它将用作键。如果您来自C#/ Java,它们的使用类似于枚举的关键部分。还有一些其他差异,但基本上任何时候你都要将字符串视为任何类型的键,你使用符号代替。
答案 1 :(得分:14)
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