当 Ruby 看到一个def
关键字时,它会改变作用域。该blah
变量在方法之外具有局部范围,因此如果您想使用该值,则需要将其传入。
您可以将blah
变量更改为实例变量,并且在编写时它将在方法的范围内。
传入局部变量可能比更改变量的范围更好。
方法名称有一个问号,通常表示“布尔”值。尽管没有严格规定,但这将是true
or的返回false
,尽管您会看到它在返回nil
或真实返回时使用它。
你的代码最好这样写:
def what(blah)
blah
end
希望有帮助。
编辑:要解决父变量,我们需要引入父关系。
# encoding: utf-8
class ParentBlah
def initialize
@blah = "Blah"
end
end
class ChildBlah < ParentBlah
def use_parent_variable_sorta
"@blah = #{@blah}"
end
end
childblah = ChildBlah.new
puts childblah.use_parent_variable_sorta
现在我们可以谈谈为什么不能使用局部变量了,这完全是一个范围问题。为了做我们在这里所做的事情,我们需要在相同的范围内创建变量。
为什么这样做?因为对象之外的逻辑不需要对象本身就知道。当确实需要知道它时,只需通过参数引入值,或者需要更改范围。我们倾向于认为,如果需要为此目的更改范围,则可能会发生其他事情。