在ruby中如何使用类级别的局部变量?(一个红宝石新手的问题)

use*_*883 8 ruby

所以假设我有这个(不工作):

class User
   description = "I am User class variable"
   def print
       puts description
   end
end
Run Code Online (Sandbox Code Playgroud)

那么,我应该如何使用var描述,如何将其作为默认参数传递给方法,或者直接在方法中使用?谢谢..

evf*_*qcg 5

在您的情况下,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"
Run Code Online (Sandbox Code Playgroud)

为了您的目的,我认为它可能会以这种方式使用

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
Run Code Online (Sandbox Code Playgroud)


cut*_*ion 5

您可以使用 访问类范围define_method

class User
   description = "I am User class variable"
   define_method :print do
       puts description
   end
end
Run Code Online (Sandbox Code Playgroud)

> User.new.print
我是 User 类变量
=> nil

不过我认为这不是个好主意:)


Jac*_*kin 1

要定义类变量,请使用@@

class User
   @@description = "I am a User class variable"

   def print
       puts @@description
   end
end
Run Code Online (Sandbox Code Playgroud)