注入类级别函数的函数

时间:2018-11-04 19:55:33

标签: ruby

我在课堂上重复写了相同的函数。有没有一种方法可以一次声明一个函数,而只需在每个相关类中引用该函数声明以使其成为该类的一部分?我想做类似的事情:

def add_func
  expand self.new_func
    puts "hello"
  end
end

class A
  import "add_func"
end

A.new_func
# >> hello world

我正在寻找一个类方法,而不是一个实例方法,但是我想知道如何做到这两个。我要寻找的Ruby构造是什么?

2 个答案:

答案 0 :(得分:3)

您可以扩展如下方法:

module SomeModule
  def foo
    true
  end
end

class SomeClass
  extend SomeModule
end

SomeClass.foo

答案 1 :(得分:0)

您无法将各个方法打包到其各自的模块中并进行扩展:

module MyModule
  module NewFunc
    def new_func
      puts "hello"
    end
  end
end

class A
  extend MyModule::NewFunc
end

A.new_func

通过一些元编程/ monkeypatching,您可以提供一种方法来仅扩展模块的某些方法,但是我认为我展示的方法足够好。

如果您想这样做,以便可以导入单个方法,或者可以导入所有方法,则可以这样做:

module MyModule
  module NewFunc
    def new_func
      puts "hello"
    end
  end

  module NewFunc2
    def new_func2
      puts "hello2"
    end
  end

  include NewFunc, NewFunc2 # this adds them to MyModule directly
end

class A
  extend MyModule
end

A.new_func
A.new_func2