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