【问题标题】:Call a method in a class in another class in Ruby在Ruby中的另一个类中调用一个类中的方法
【发布时间】:2015-09-30 09:27:07
【问题描述】:

我想知道如何在另一个类的一个类的实例中调用一个方法。

这是我想出来的

class ClassA
  def method
    return "This is a method_from_class_A"
  end
end

class ClassB
  def initialize
    @method_from_class_A=instance.method
  end
  def method_calls_method
    @method_from_class_A
  end
end


instance=ClassA.new

instance2=ClassB.new

puts instance2.method_calls_method

但我收到此错误:

Testing.rb:9:in initialize': undefined local variable or method instance' for # (NameError) from Testing.rb:19:in new' from Testing.rb:19:in'

我该如何解决?

感谢您的回复。

【问题讨论】:

    标签: ruby class methods undefined


    【解决方案1】:

    根据你的描述,这似乎是你想要的:

    class ClassB
      def initialize
        @instance_of_class_a = ClassA.new
      end
    
      def method_calls_method
        @instance_of_class_a.method
      end
    end
    

    或者传入ClassA实例(这称为依赖注入):

    class ClassB
      def initialize(class_a_instance)
        @instance_of_class_a = class_a_instance
      end
    
      def method_calls_method
        @instance_of_class_a.method
      end
    end
    
    instance_a = ClassA.new
    instance_b = ClassB.new(instance_a)
    puts instance_b.method_calls_method
    

    【讨论】:

      【解决方案2】:

      另一种选择是查看类方法:https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/113-class-variables

      所以在您的代码中,它看起来类似于:

      class ClassA
        def self.method
          return "This is a method_from_class_A"
        end
      end
      
      class ClassB
        def method_calls_method
          ClassA.method
        end
      end
      
      
      instance=ClassB.new
      
      puts instance.method_calls_method
      

      *注意 ClassA 中的 self. 表示类方法。这类似于其他语言中的静态方法。

      根据维基百科:https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods

      Class(static) 方法旨在与类的所有实例相关,而不是与任何特定实例相关。

      您会看到在 ruby​​ Math 类中使用了很多类方法: http://ruby-doc.org/core-2.2.2/Math.html

      例如,通过使用类方法Math.sqrt 对数字求平方根。这与看起来像object.method 而不是Class.method 的实例方法不同。有很多资源和教程可以更详细、更清晰地解释这个概念。

      【讨论】:

      • 我是编码新手,所以我不完全知道静态方法(self.)是什么以及做什么。请你给我解释一下。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多