在Ruby中如果我只是分配一个局部变量。
sound = "bang".
是一种main.sound=("bang")
方法吗?如果是这样,那个方法“sound =”在哪里以及如何被定义?或者这项任务如何运作?如果没有,实际发生了什么?
我知道对于一个setter方法,你会说x.sound =(“bang”)。并且您使用参数“bang”在对象“x”上调用方法“sound =”。你正在创建一个实例变量“声音”。
我可以想象所有这些。但不是在“主”对象中分配变量时。据我所知,它不是Object类的实例变量......或者是它?我很困惑。
答案 0 :(得分:6)
在大多数编程语言中,包含Ruby,赋值是一种奇怪的野兽。它不是一个方法或函数,它所做的是将一个名称(也称为左值,因为它左侧的赋值)与一个值相关联。
Ruby增加了定义名称以=结尾的方法的能力,可以使用赋值语法调用。
属性访问器只是创建其他方法的方法,这些方法用于获取和分配类的成员变量。
所以基本上有3种方法可以看出作业:
答案 1 :(得分:1)
变量赋值只是创建对象的引用,比如命名狗" Spot"。 " ="没有任何方法。
正如@ZachSmith评论一样,一个简单的表达式如sound
可以引用一个名为" sound"或self
名为" sound&#34的方法的局部变量;。为了解决这种歧义,Ruby将标识符视为局部变量,如果它已经"看到"先前对变量的赋值。
答案 2 :(得分:0)
是一个main.sound =(“bang”)方法吗?
没有。 main.sound="bang"
应设置实例变量或该变量的元素
使用点(main.sound
),您告诉对象执行某些方法(在本例中为sound
)。
管理局部变量ruby创建新范围。
class E
a = 42
def give_a
puts a
end
def self.give_a
puts a
end
binding
end
bin_e = _ # on pry
E.give_a # error
E.new.give_a # error
两种方法都不了解a
。创建课程后,a
很快就会消失,被垃圾收集器删除。但是,您可以使用binding
方法获取该值。它将局部范围保存到某个地方,您可以将其分配给变量。
bin.eval "a" # 42
lambda
具有定义它们的范围:
local_var_a = 42
lamb = ->{puts local_var_a}
lamb.call() # 42