在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