在Ruby中的另一个类中调用一个类中的方法

时间:2015-07-11 19:27:03

标签: ruby class methods undefined

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

这就是我想出来的

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:initialize': undefined local variable or method 实例'中的#(NameError)来自   Testing.rb:19:new' from Testing.rb:19:in'

我该如何解决?

感谢您的回复。

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

另一个选择是查看类方法: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

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

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

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