为什么课程中需要@variables
?他们增加了什么价值?我在网上找不到任何东西,但也许我正在寻找错误的条款。有在线资源我可以查看吗?谢谢!
car.rb
class Car
attr_accessor :make, :model
def initialize(make = '')
@make = ''
@model = ''
end
end
答案 0 :(得分:2)
这些变量称为实例变量。该类的每个实例都有自己的这些变量副本。
在您的示例中,您希望Car类的每个实例都拥有自己的品牌和型号。
请注意以下示例
car1 = Car.new("Toyota", "Carola")
car2 = Car.new("Mitsubishi", "Lancer")
car1和car2都有自己的私人make
和model
。告诉Ruby解释器执行此操作的方法是使用@。
答案 1 :(得分:1)
这是在ruby中定义实例变量的语法。
答案 2 :(得分:1)
实例变量可用于每个类实例的所有区域。
每次创建汽车实例时,变量都特定于该特定的变量。
e.g。
car1 = Car.new('Ford', 'Falcon')
car2 = Car.new('Toyota', 'Camry')
现在car1和car2有不同的@make和@model实例。
如果使用@@make
将变量声明为类变量,那么每个Car都可以访问它,每次更改时,都会为每个人更改。
基本上,类变量允许您在数据周围放置一些“墙”。
attr_accessor
会在您的通话中创建两种方法
def make=(value)
@make = value
end
def make
@make
end
这允许您在没有@
的情况下在类外部调用实例变量e.g。
car1.make
返回
'Ford'
www.codecademy.com有一些很棒的免费基础Ruby课程,可以很好地教你这些东西。
答案 3 :(得分:0)
据说对象具有行为和属性,就像现实世界对象一样。 对象的属性由实例变量定义。而@前缀是 ruby告诉特定变量的方式是实例变量/特征。
他们添加了什么价值?
它们可以帮助您获得可在所有实例方法中访问的变量。
让我们讨论你的例子
class Car
attr_accessor :make, :model #attr_accessor methods creates a getter method. car_instance.make and
#a setter method car_instance.make=(val), which otherwise you would have to do explicitly.
def initialize(make = '') #constructor
@make = '' #initializing your instance variables. I guess you meant @make = make here
@model = ''
end
end
我在网上找不到任何东西,但也许我正在寻找错误的条款。
你是谁。
网上有资源我可以查看吗?
是的,Ruby User Guide来自Matz
更多细节
在ruby中,类中变量的范围由编译器通过前两个字符标识 可变名称。
@@ variable_name - >两个'@'。类的所有实例中的类变量/范围。例如:如果您想计算您制造的汽车总数。
@variable - >实例中的一个“@”实例变量/范围。
变量 - >没有'@'局部变量/它们所属的块的范围。
答案 4 :(得分:-1)
请看下面的代码,为了理解我改变了一下:
class Car
attr_accessor :make, :model
def initialize(make = '')
@make = make
@model = ''
end
end
car1 = Car.new("Toyota")
car2 = Car.new("Roxin")
p car1.instance_variables #<~~ A
p car2.instance_variables #<~~ B
p car1 #<~~C
p car2#<~~D
输出:
[:@make, :@model]
[:@make, :@model]
#<Car:0x1bc89e8 @make="Toyota", @model="">
#<Car:0x1bc8940 @make="Roxin", @model="">
说明:在 A 和 B 中,您可能会想到car1,car2都使用了相同的实例变量副本。但事实并非如此。查看我在打印car1和car2时,在 C 和 D 中,输出显示car1和car2对实例变量@make
保持不同的值。这个事实对象有自己独特的实例变量。
希望这有帮助。
干杯!!