2015-03-03 99 views
0

例如呼叫父類的方法,我有類似的東西(1.9.1):紅寶石:從內部類

class Chef::Recipe::MyFancyFeature 
    def my_action do 
    search(:node, 'repice[common]') 
    end 
end 

我認爲沒有區別,因爲這方式:

class Chef 
    class Recipe 
    class MyFancyFeature 
     def my_action do 
     search(:node, 'repice[common]') 
     end 
    end 
    end 
end 

和我的第二部分問題(最重要):方法search定義在Chef::Recipe以及我如何從我的MyFancyFeature類中調用它?

+0

這是示例和簡單部分代碼 – WBAR 2015-03-03 07:21:48

+0

問題的第一部分是什麼? – sawa 2015-03-03 07:26:22

+0

'Chef :: Recipe :: MyFancyFeature'和'class Cheff class Recipe class MyFancyFeature'之間的區別是什麼? – WBAR 2015-03-03 07:28:20

回答

1

廣告1)是的,他們都是一樣的

廣告2)如果你想打電話searchChef::Recipe,你要做的:

class Chef 
    class Recipe 
    def search(arg1, arg2) 
     # your logic here 
     p arg1 
     p arg2 
    end 

    class MyFancyFeature 
     def my_action 
     Recipe.new.search(:node, 'repice[common]') 
     end 
    end 
    end 
end 

祝你好運!

+0

謝謝,Paweł。現在我可以理解它是'Recipe'中的嵌套類,'MyFancyFeature'我無法訪問'Recipe'的實例變量。我對麼 ? – WBAR 2015-03-03 07:51:38

+1

那麼,你沒有直接訪問(也就是「直接」我的意思是'@ your_var'),但是你可以通過訪問器方法暴露你的屬性(例如'attr_accessor:your_var')。請記住,「食譜」只是一個類,即使你正在嘗試在「MyFancyFeature」內做到這一點, – 2015-03-03 07:56:19

+0

我真的不確定它會如何在廚師的行爲中運行,因爲你已經在食譜實例中你會調用'MyFancyFeature :: my_action'建議的方法是使用Module和Module,然後將它們發送到Recipe命名空間。請參閱[例如](https://github.com/opscode-cookbooks/apt/blob/master/libraries/helpers.rb) – Tensibai 2015-03-03 09:05:11