2015-03-03 150 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