我正在使用 Ruby on Rails 3,我想知道在什么情况下应该使用实例变量而不是其他变量类型,以及是否存在安全原因。
Example:
# Using an instance variable
@accounts = Account.find(...)
# Using a "local"\"normal" variable
account = Account.find(...)
一般来说,实例变量是本地的,并保留在对象实例内,而局部变量只是本地的,并保留在函数/对象/块作用域内。例如:
class User
def name
@name
end
def name= name
@name = name
end
end
def greet user
name = user.name || 'John'
p "Hi, my name is #{name}"
end
user = User.new
greet user
=> 'Hi, my name is John'
name
=> NameError: undefined local variable or method 'name' for main:Object
user.name = "Mike"
greet user
=> 'Hi, my name is Mike'
@name
=> nil
在问候函数中name
是仅在该函数内定义的局部变量。 name 变量设置在函数的第一行,name = user.name || 'John'
,但其值不会在函数外部保留。当你尝试打电话时name
你得到一个NameError
因为 name 仅被定义为greet 函数中的局部变量。
@name
对于 User 类的用户实例来说是本地的。当您尝试在该上下文之外调用它时,您会得到nil
。这是本地变量和实例变量之间的区别之一,如果实例变量尚未定义,则返回 nil,而本地非实例变量会引发错误。
请注意,这两种变量类型对于特定上下文都是本地的。@name
是在用户实例中定义的,因此当您调用user.name
您正在用户实例中调用 name 函数,其中@name
被定义为。name
只在greet函数中定义,所以当你调用p "Hi, my name is #{name}"
你可以获得一个值name
因为你在它定义的范围内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)