2015-09-25 23 views
-2

如何在同一个模块内使用此方法的类中定义方法?如何在模块内部定义一个方法?

我想要做什么:

module X 
    def bar 
    puts 'Hello' 
    end 

    class Y 
    def foo 
     bar 
    end 
    end 
end 

我想打电话给使用Y.new.foo例如bar方法。我想在我的模块中定义方法,以便模块中的所有类都会继承它们。

为什么不能正常工作?什么是最接近的方式来做到这一点?

+0

你想要做什么?它怎么不起作用?你会得到什么错误? – Mhmd

+0

用英文书写时请使用英文标点符号。 – sawa

回答

3

假设您不希望在该类中包含该模块,则不能引用该方法,因为没有实例可以调用它。您可以改为:

module X 
    def self.bar 
    puts 'Hello' 
    end 

    class Y 
    def foo 
     X.bar 
    end 
    end 
end 
0
,如果你想用很多方法

,最好使用包括

module X 
    def bar 
    puts 'Hello' 
    end 

    class Y 
    include X 
    def foo 
     bar 
    end 
    end 
end 
+0

在foo中使用X.bar。 –

+0

我用X :: Y.new.foo测试过,它工作正常 –

1

我认为这是最好使用一个单独的对象定义共享的方法,而不是污染名字空间目的。

module X 

    module InstanceMethods 
    def bar 
     puts 'Hello' 
    end 
    end 

    class Y 
    include InstanceMethods 
    def foo 
     bar 
    end 
    end 

end 
+0

为什么在这种特殊情况下类声明的顺序很重要?我的意思是Y类必须在模块InstanceMethods之后声明。 –

相关问题