0
我正在嘗試構建一個可以包含在任何類中的模塊,並且可以直接調用它的方法。直接沒有運算符('。'或'::')的訪問模塊方法
紅寶石colored就是一個很好的例子。例如,我可以在任何地方從Colored
模塊調用方法,只需執行諸如puts "I am the color blue!".blue
之類的操作即可,但這不是任何類。但我注意到他們調用String.send(:include, Colored)
。
任何洞察力是讚賞。
目標:
module Example
def do_something
puts 'foo!'
end
end
# Instead of calling Example::do_something or Example.do_something,
# I want to do this:
do_something # => 'foo!'
(不正確的方法)
module Example
extend self
def do_something
puts 'foo!'
end
end
do_something # => undefined local variable or method `do_something' for main:Object (NameError)
(另一種不正確的方法)
module Example
extend self # not sure...
def self.do_something
puts 'foo!'
end
end
do_something # => undefined local variable or method `do_something' for main:Object (NameError)
你說你要定義可以'包括在任何類的模塊,但在你的例子中,你不包括它的地方你想在所有叫它。你真的是指「任何」班嗎?或者你是否真的想讓它成爲_every_課程中的一員?總的來說,你所描述的並不是Ruby ruby的工作方式,儘管有很多種方法可以實現它,這取決於你真正想要做什麼。 – jrochkind
@ jrochkind這是一個令人困惑的問題,因爲我很困惑,對不起!請參閱更新的問題。我一直在研究的一個例子是[color gem](https://github.com/defunkt/colored) – binarymason
彩色的寶石猴子補丁(在運行時添加)到String中。注意你實際上不能在任何地方調用它的方法,你必須在String類上調用它們:''一個字符串「.blue','some_string.blue'。這種猴子補丁通常被認爲是一個壞主意。現在還不是你要求的。如果你真的想定義一個可以被稱爲「任何地方」的方法,不要在模塊中定義它,只需在「頂層」上定義它在任何模塊或類之外。但這不是一個好主意,除了不是什麼有色寶石在做什麼,這也不是一個好主意 – jrochkind