代码之家  ›  专栏  ›  技术社区  ›  tableguarder

如何使我的类属性不能直接访问实例变量?

  •  -1
  • tableguarder  · 技术社区  · 8 年前

    我如何使我的代码工作,使balance属性不直接访问实例变量(我相信它是@balance)?有人能解释一下属性 实例变量?

    我刚开始使用Ruby,刚刚开始学习Ruby类。在本章中,我的目标是理解实例变量的概念,演示getter和setter方法的用法,理解如何使用实例方法,以及理解封装的概念。

    class BankAccount
      attr_accessor :balance
    
      def initialize(balance)
        @balance = balance
      end
    
      def withdraw(amount)
        if (balance >= amount)
          @balance = balance - amount
        end
      end
    end
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   gettalong    8 年前

    attr_reader :balance 或多或少只是以下方法的一个方便版本:

    def balance
      @balance
    end
    

    同样地, attr_writer :balance 只是

    def balance=(value)
      @balance = value
    end
    

    attr_accessor :balance 是的缩写 属性读取器:平衡 属性写入程序:平衡

    attr_reader 访问 实例变量没有什么特别的,例如,在您的代码中,您还可以在中访问实例变量 #initalize #withdraw .

    @balance 不管有没有,都没有 间接的 在我看来。

        2
  •  0
  •   Babar Al-Amin    8 年前

    定义您自己的版本 balance

    class BankAccount
      attr_accessor :balance
    
      def initialize(balance)
        @balance = balance
      end
    
      def withdraw(amount)
        if (balance >= amount)
          @balance = balance - amount
        end
      end
    
      def balance
        'balance from method directly'
      end
    end
    

    现在当你打电话的时候 均衡

    推荐文章