在ruby中如何使用类级局部变量?(红宝石新手的问题)
所以假设我有这个(不工作):在ruby中如何使用类级局部变量?(红宝石新手的问题),ruby,Ruby,所以假设我有这个(不工作): 那么,我应该如何使用var描述,如何将其作为默认参数传递到方法中,或者直接在方法中使用?谢谢..要定义类变量,请使用@: class User @@description = "I am a User class variable" def print puts @@description end end 实例变量必须以@作为前缀,并且不能从外部访问。 类变量的前缀必须为@ 第一次在代码中的任何位置使用此变量时,它将被初始化。 如
那么,我应该如何使用var描述,如何将其作为默认参数传递到方法中,或者直接在方法中使用?谢谢..要定义类变量,请使用
@
:
class User
@@description = "I am a User class variable"
def print
puts @@description
end
end
实例变量必须以@作为前缀,并且不能从外部访问。 类变量的前缀必须为@ 第一次在代码中的任何位置使用此变量时,它将被初始化。 如果要从外部访问该值:
attr_reader :description
在您的例子中,
说明
只是局部变量。您可以使用特殊字符@
,@
,$
更改此范围:
a = 5
defined? a
=> "local-variable"
@a = 5
defined? @a
=> "instance-variable"
@@a = 5
defined? @@a
=> "class variable"
$a = 5
defined? $a
=> "global-variable"
出于你的目的,我想它可能是这样使用的
class User
def initialize(description)
@description = description
end
def print
puts @description
end
end
obj = User.new("I am User")
obj.print
# => I am User
您可以使用
define\u方法
访问类范围
class User
description = "I am User class variable"
define_method :print do
puts description
end
end
>User.new.print我是用户类变量
=>零
不过,我认为这不是个好主意:)
attr\u reader
只适用于实例变量,而不适用于类变量。如果您使用的是Rails,您可以使用cattr_reader
来实现这一点。但是我看到一个代码示例像我一样使用变量,那么它合法吗?@user875883这将是一个奇怪的代码示例。也许这是关于显示在类级别上定义的局部变量如何不在方法的作用域中?a,但他问如何使用局部变量。。如果您使用@或@或$,那么您自己的答案表明它不是局部变量。因此它没有回答这个问题。您在回答中提供的大量信息表明,局部变量不是类的局部变量。
class User
description = "I am User class variable"
define_method :print do
puts description
end
end