我正在尝试添加一个可以在我的程序的所有部分访问的功能.我想要的东西:
def GlobalFunctions.my_function(x,y)
puts x + y
end
Run Code Online (Sandbox Code Playgroud)
适用于所有型号.具体来说,我试图在我的seeds.rb文件中使用这样的函数,但我很可能会重用代码而不需要任何冗余.现在我知道我可以做一个简单的课,但我也可以制作一个模块.朝哪个方向走的是什么原因?一旦我决定使用哪种类型,我如何在整个程序中访问它?
我已经尝试了一个模块,但我一直得到"预期app/[模块文件]来定义[ModuleName]"
Pre*_*ids 43
你要为你想要制作实例的东西定义一个类.在这种情况下,模块可能会更好,因为模块基本上只是将代码组合在一起:
module GlobalFunctions
def self.my_function(x,y)
puts x+y
end
end
GlobalFunctions.my_function(4,5) # => 9
Run Code Online (Sandbox Code Playgroud)
或者,您可以在内核上定义它,然后在任何地方调用它.内核是定义诸如puts之类的方法的地方.
def Kernel.my_function(x,y)
puts x + y
end
my_function(4,5) # => 9
Run Code Online (Sandbox Code Playgroud)
小智 17
向Kernel添加方法(来自PreciousBodilyFluids的答案)通常被认为是难闻的气味,并且可能导致一些在大型项目中很难找到错误.
相关命名空间并将其放入/ lib /更为可接受.
class Formatting
def self.bold(str)
return "<strong>#{str}</strong>"
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以:
require 'formatting'
puts Formatting.bold("text")
Run Code Online (Sandbox Code Playgroud)
要么
require 'formatting'
include Formatting
puts bold("text")
Run Code Online (Sandbox Code Playgroud)
对于那些稍后使用您的代码的人来说,这也很清楚.如果您使用的是Rails,则不需要.
| 归档时间: |
|
| 查看次数: |
19853 次 |
| 最近记录: |