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

后端 未结 4 1053
挽巷
挽巷 2020-12-17 20:34

So suppose I have this (not working):

class User
   description = \"I am User class variable\"
   def print
       puts description
   end
end
相关标签:
4条回答
  • 2020-12-17 21:07

    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 :)

    0 讨论(0)
  • 2020-12-17 21:10

    To define a class variable, use an @@:

    class User
       @@description = "I am a User class variable"
    
       def print
           puts @@description
       end
    end
    
    0 讨论(0)
  • 2020-12-17 21:13

    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
    
    0 讨论(0)
  • 2020-12-17 21:15

    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 讨论(0)
提交回复
热议问题