我正在尝试添加一个可以在程序的所有部分中访问的函数。我想要这样的东西:
def GlobalFunctions.my_function(x,y)
puts x + y
end
可供所有型号使用。具体来说,我试图在我的seeds.rb文件中使用这样的函数,但我很可能会重用代码而不想要任何冗余。现在我知道我可以做一个简单的课,但我也可以制作一个模块。朝哪个方向走的是什么原因?一旦我决定使用哪种类型,我如何在整个程序中访问它?
我已经尝试了一个模块,但我不断收到“预期app / [模块文件]来定义[ModuleName]”
答案 0 :(得分:42)
你要为你想要制作实例的东西定义一个类。在这种情况下,模块可能会更好,因为模块基本上只是将代码组合在一起:
module GlobalFunctions
def self.my_function(x,y)
puts x+y
end
end
GlobalFunctions.my_function(4,5) # => 9
或者,您可以在内核上定义它,然后在任何地方调用它。内核是定义诸如puts之类的方法的地方。
def Kernel.my_function(x,y)
puts x + y
end
my_function(4,5) # => 9
答案 1 :(得分:17)
向Kernel添加方法(来自PreciousBodilyFluids的回答)通常被认为是一种难闻的气味,并且可能导致一些很难在大型项目中发现错误。
相关地命名代码并将其放入/ lib /.
更为可接受class Formatting
def self.bold(str)
return "<strong>#{str}</strong>"
end
end
然后你可以:
require 'formatting'
puts Formatting.bold("text")
或
require 'formatting'
include Formatting
puts bold("text")
对于那些后来使用该代码的人来说,这也很清楚。如果您使用的是Rails,则不需要。
答案 2 :(得分:2)
PreciousBodilyFluids是正确的,如果此GlobalFunctions
是RoR项目的一部分,您可能需要将文件命名为global_functions.rb
并将其放在lib/
目录中,以帮助您避免您在问题结尾处发布的错误消息。