HXH*_*HXH 5 module ruby-on-rails
我想在 Rails 助手中包含一个模块(也是一个模块)。
帮助者是:
module SportHelper
.....
end
Run Code Online (Sandbox Code Playgroud)
该模块是:
module Formula
def say()
....
end
end
Run Code Online (Sandbox Code Playgroud)
say现在,我想使用中的方法SportHelper。我应该怎么办?
如果我这样写:
module SportHelper
def speak1()
require 'formula'
extend Formula
say()
end
def speak2()
require 'formula'
extend Formula
say()
end
end
Run Code Online (Sandbox Code Playgroud)
这会起作用,但我不想这样做,我只想在帮助器模块上添加方法,而不是每个方法。
您只需将此模块包含在您的助手中即可:
\n\nrequire \'formula\'\n\nmodule SportHelper\n include Formula\n\n def speak1\n say\n end\n\n def speak2\n say\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\nrequire \'formula\'如果这一行已经在加载路径中,也许您不需要它。要检查这一点,您可以检查$LOAD_PATH变量。欲了解更多信息,请参阅此答案。
extend和之间的基本区别include在于,include 用于向类的实例添加方法,而extend 用于添加类方法。
module Foo\n def foo\n puts \'heyyyyoooo!\'\n end\nend\n\nclass Bar\n include Foo\nend\n\nBar.new.foo # heyyyyoooo!\nBar.foo # NoMethodError: undefined method \xe2\x80\x98foo\xe2\x80\x99 for Bar:Class\n\nclass Baz\n extend Foo\nend\n\nBaz.foo # heyyyyoooo!\nBaz.new.foo # NoMethodError: undefined method \xe2\x80\x98foo\xe2\x80\x99 for #<Baz:0x1e708>\nRun Code Online (Sandbox Code Playgroud)\n\n如果您extend在对象方法内部使用,它将向类的实例添加方法,但它们仅在该方法内部可用。
| 归档时间: |
|
| 查看次数: |
12134 次 |
| 最近记录: |