Ruby on rails 什么';这两者之间的区别是什么=&引用&&引用=&燃气轮机&引用;及@变量"&引用@@变量";及变量";用红宝石?

Ruby on rails 什么';这两者之间的区别是什么=&引用&&引用=&燃气轮机&引用;及@变量"&引用@@变量";及变量";用红宝石?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我知道这些是rails的基础,但我仍然不知道rails中的符号和变量之间的区别,以及一些变量之间的区别 谢谢 哇,这有很多不同的概念 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

我知道这些是rails的基础,但我仍然不知道rails中的符号和变量之间的区别,以及一些变量之间的区别


谢谢

哇,这有很多不同的概念

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

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

您可能会感到困惑,因为您可以在方法中使用一些快捷方式,如果最后一个参数是散列,您可以省略扭曲的括号(
{}
)。因此调用
render:partial=>'foo'
基本上就是调用render方法,用一个键/值对传入一个散列。正因为如此,您经常会看到散列作为最后一个参数来排序穷人的可选参数(您也可以在JavaScript中看到类似的操作)

在Ruby中,任何普通单词都是局部变量。因此,方法中的
foo
是一个作用于方法级别的变量。在变量前面加上
@
表示将变量的作用域扩展到实例。因此,方法中的
@foo
是一个实例级别

@
表示类变量,意味着
@
变量在类的范围内,并且所有实例都在类的范围内


表示符号。Ruby中的符号是一种特殊的字符串,表示它将用作键。如果您来自C#/Java,那么它们在使用上与枚举的关键部分类似。还有一些其他的区别,但基本上任何时候你要把一个字符串当作任何类型的键,你都要用一个符号来代替。

例3和例4让我很困惑,我看不出例3和例4有什么区别。@Simon用@x而不是@x来运行例4,你就会看到区别了