2017-04-11 9 views
0

Rubyについてよく分かりませんが、私はこのコードが何をしているのか理解してくれることを願っていました。この行...PuppetモジュールのRubyコードを理解するopenstack/nova

newproperty(:value, :array_matching => :all) do 

が...何をしているか

newproperty(:value, :array_matching => :all) do 
    desc 'The value of the setting to be defined.' 
    def insync?(is) 
     return true if @should.empty? 
     return false unless is.is_a? Array 
     return false unless is.length == @should.length 
     return (
     is & @should == is or 
     is & @should.map(&:to_s) == is 
    ) 
end 

は、私は全くわかりません。 2つのパラメータを受け入れる関数を定義しています:array_matching?ループですか?そして、私は:array_matching =>:のすべてについて理解していません。

次は...

desc 'The value of the setting to be defined.' 

です...これはドキュメントに建てられたのいくつかの並べ替えですか?次はこのビットです:

def insync?(is) 
     return true if @should.empty? 
     return false unless is.is_a? Array 
     return false unless is.length == @should.length 
     return (
     is & @should == is or 
     is & @should.map(&:to_s) == is 
    ) 

"insync"という関数が定義されていると思います。わからない "?"手段。また、親スコープで宣言されたグローバル変数もあるはずです。

おかげ

答えて

1

私は仮定をし、提供情報から私ができる最善のようにこれに答えることをしようとするでしょう。

  1. おそらく機能newproperty(x, y) <を持っている - どこかに関連したモデルやヘルパーでは、2つの引数を受け入れます。 :value:array_matching => :allが割り当てられているユーザーインタラクションからの入力は、:valueに基づいています。

  2. descは、ネイティブのRuby関数ではありません。どこかで定義する必要があります。

def desc(x) puts x end

desc 'The value of the setting to be defined.'

それは少し型破りだが、それは動作します:たとえば、このコードが実行されます。

  1. def insync?(is)は関数名の一部です。 Rubyは英語に似た言語を意図しており、多くの関数が真または偽と評価されるため、関数を単なる質問にすると読みやすくなります。
+0

ご回答ありがとうございます。私はまだnewpropertyサブルーチンのパラメータ宣言で '=>'が何を意味するのか理解していません。 :) –

+0

私は完全にはわからなかったので、私はそれを探し、この同じリソースを見つけました。それは、それが 'namevar'と呼ばれる人形のユニークな特性のようです。 http://garylarizza.com/blog/2013/11/25/fun-with-providers/ cntrl fのセクションに 'Namevars is unique little snowflakes' –

関連する問題