test_module.rb紅寶石module_function,調用模塊的私有方法,在模塊類的方法調用風格顯示錯誤
module MyModule
def module_func_a
puts "module_func_a invoked"
private_b
end
module_function :module_func_a
private
def private_b
puts "private_b invoked"
end
end
class MyClass
include MyModule
def test_module
module_func_a
end
end
從類調用模塊功能
c = MyClass.new
c.test_module
輸出1:
$ ruby test_module.rb
module_func_a invoked
private_b invoked
上模塊調用模塊的功能在類方法風格
ma = MyModule.module_func_a
輸出2:
module_func_a invoked
test_module.rb:5:in `module_func_a': undefined local variable or method `private_b' for MyModule:Module (NameError)
from test_module.rb:31
如可從包括在模塊中時,輸出1和輸出2 可以看出一個類,當模塊的私有方法從模塊函數 被調用時,在直接調用c中模塊上的模塊函數時不會發生問題lass方法樣式模塊的私有方法,從模塊函數調用,未找到。
任何人都可以讓我理解上述行爲背後的原因,以及是否可以或不可以調用模塊函數(反過來調用模塊的私有方法)模塊上的類方法樣式?如果可能的話,那麼在我的代碼中需要做些什麼糾正才能做到這一點?
Thanks.This works.I試圖延長自我Mymodule中,這是working.However似乎在這種情況下,私人似乎是多餘的,並沒有effect.So難道是像那些提到的情況下,我們不能創建私有方法?例如,我需要創建一個實用程序方法,該方法只能由模塊實例或模塊函數使用,不應該暴露給模塊的用戶。 – 2012-04-06 12:19:34
您不能,這就是爲什麼我更喜歡使用委派。 – psyho 2012-04-06 12:27:37
@pysho - 你能否給我一個例子或者提供一個鏈接,提供關於如何使用你提到的代表團的細節? – 2012-04-06 12:57:44