开发者

In ruby how to use class level local variable? (a ruby newbie's question)

开发者 https://www.devze.com 2023-04-08 14:28 出处:网络
So sup开发者_运维技巧pose I have this (not working): class User description = \"I am User class variable\"

So sup开发者_运维技巧pose I have this (not working):

class User
   description = "I am User class variable"
   def print
       puts description
   end
end

So, how should I use the var description, how to pass this into a method as a default parameter, or used in the method directly? Thanks..


In your case, the description is only local variable. You can change this scope using special characters @, @@, $:

a = 5
defined? a
=> "local-variable"

@a = 5
defined? @a
=> "instance-variable"

@@a = 5
defined? @@a
=> "class variable"

$a = 5
defined? $a
=> "global-variable"

For your purpose, I think it might be using by this way

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


You can access the class-scope using define_method.

class User
   description = "I am User class variable"
   define_method :print do
       puts description
   end
end

> User.new.print
I am User class variable
=> nil

I don't think it's good idea, though :)


To define a class variable, use an @@:

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

   def print
       puts @@description
   end
end


Instance variables must be prefixed with an @ and are not accessible from outside. Class variables must be prefixed with an @@.

The first time you use this variable anywhere in code, it will be initialized. If you want to access the value from outside:

attr_reader :description

http://rubylearning.com/satishtalim/tutorial.html

0

精彩评论

暂无评论...
验证码 换一张
取 消