2017-04-11 66 views
0

我不太瞭解Ruby,希望有人能夠幫助我理解這段代碼在做什麼。瞭解來自Puppet模塊的Ruby代碼openstack/nova

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 

我不知道在所有這行...

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

......在做什麼。正在定義一個函數,它接受兩個參數: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」的函數正在被定義。不確定什麼'?'手段。另外我想@should是在父範圍中聲明的一些全局變量。

感謝

回答

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. The?在def insync?(is)是函數名稱的一部分。 Ruby意在成爲一種類似英語的語言,並且由於許多函數評估爲真或假,因此當您只是將函數本身作爲一個問題時,讀起來更容易。
+0

感謝您的回答。我仍然不明白newproperty子例程中參數聲明中'=>'的含義。 :) –

+0

我不完全確定,所以我搜索了它,發現這個相同的資源。它看起來像一個名爲'namevar'的傀儡的獨特屬性。 http://garylarizza.com/blog/2013/11/25/fun-with-providers/ cntrl f到部分'Namevars是獨特的小雪花' –