搜尋

首頁  >  問答  >  主體

ruby 類別問題

class 的問題 (不好意思,我的理解能力很差)

  1. instance method, variable
  2. class method, variable

我已經閱讀其他ruby書籍,還是不懂它區別在哪。
一樣是方法和變量,這2個的差別或用意在那裏?

還有最後一個問題是self
self是什麼?

希望各位大大,能幫我解決這些問題,希望能舉幾個簡單簡明的例子^^
謝謝^^

PHP中文网PHP中文网2913 天前738

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-22 09:01:38

    我試著貼個代碼解釋下吧,lz如果不懂就到評論裡追問我吧。

    #!/usr/bin/env ruby
    # encoding: UTF-8
    
    class Trivia
      @@x = 10
    
      def instance_scope_x
        @x
      end
    
      def instance_scope_x=(x)
        @x = x
      end
    
      def self.class_scope_x
        @@x
      end
    
      def self.class_scope_x=(x)
        @@x = x
      end
    end
    
    a = Trivia.new
    # 只有Trivia对象才能使用class方法。所以这里用a.class返回Trivia对象
    p "The class scope x in a : #{a.class.class_scope_x}"
    a.instance_scope_x = 20
    p "The instance scope x in a : #{a.instance_scope_x}"
    
    b = Trivia.new
    # Trivia的实例修改自身的值,不会影响同个类的其他实例
    p "The instance scope x in b : #{b.instance_scope_x}"
    p "The class scope x in b : #{b.class.class_scope_x}"
    b.class.class_scope_x = 30
    # 修改了Trivia类的值。因为a和b共享同一个类对象(都指向Trivia),所以现在值改变了
    p "Now the class scope x in a : #{a.class.class_scope_x}"
    
    # self指向当前作用域的所有者
    class Trivia
      # 类作用域
      p self
    
      def self_scope_x
        # 实例作用域
        p self
        # 这里self指向实例作用域
        self.instance_scope_x
      end
    
      def self.self_scope_x
        # 这里self指向类作用域
        self.class_scope_x
      end
    end
    
    p "The self_scope_x in Trivia: #{Trivia.self_scope_x}" # 调用的是class_scope_x
    p "The self_scope_x in Trivia's instance: #{a.self_scope_x}" # 调用的是instance_scope_x
    

    回覆
    0
  • 阿神

    阿神2017-04-22 09:01:38

    我會在文章裡講解這些問題,歡迎追蹤

    回覆
    0
  • 取消回覆