红宝石中"="&"=>"和"@variable","@@ variable"和":variable"之间有什么区别?

Mo.*_*Mo. 9 ruby ruby-on-rails

我知道这些都是导轨的基础知识,但我仍然不知道之间的差别完全=符号和=>之间的差异@some_variable,@@some_variable:some_variable在轨道上.

谢谢.

Mat*_*ggs 18

好.

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

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

在Ruby中,任何普通单词都是局部变量.因此foo,方法内部是一个作用于方法级别的变量.使用@平均值将变量添加到实例的前缀.所以@foo在一个方法中是一个实例级别.

@@表示类变量,表示@@变量在类的范围内,以及所有实例.

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


Nik*_*bak 14

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

1)=是普通的旧任务.

a = 4;
puts a
Run Code Online (Sandbox Code Playgroud)

2)=>用于声明哈希

hash = {'a' => 1, 'b' => 2, 'c' => 3}
puts hash['b'] # prints 2
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

5)我通常认为:var是特殊的"标签"类.例2可以像这样重新说明

hash = {:a => 1, :b => 2, :c => 3}
puts hash[:b] # prints 2
Run Code Online (Sandbox Code Playgroud)