2012-09-02 63 views
0
stanza_class.new(node.attributes if node.attributes) 

我傳遞一個變量,可能是一個方法中的零。 有沒有一種在ruby中做這件事的美麗方式?Ruby通過屬性,可能是零

+2

'node.attributes如果node.attributes'是沒有意義的。 'node'可能是零嗎?然後'node.attributes if node' – tokland

回答

0

如果您在使用Ruby on Rails,你可以使用try方法:

EG。

node.try(:attributes) 

這意味着,如果nodenil,它返回的nil而不是在NilClass缺少方法。

參考:http://api.rubyonrails.org/classes/Object.html#method-i-try

如果你不使用的軌道,就可以猴子自己修補Object類。並(在參考URL),選擇猴子修補Rails的源代碼是:

class Object 
    def try(*a, &b) 
    if a.empty? && block_given? 
     yield self 
    else 
     __send__(*a, &b) 
    end 
    end 
end 

如果你的意思是節點從來都不是零,但node.attributes可能是零,那麼你可以這樣做:

stanza_class.new(node.attributes) 

這是因爲

stanza_class.new(nil) 

相當於

stanza_class.new() 

也就是說,未通過的參數默認設置爲零。

0

我假設它是node其中可能是nil。這是非常地道:

stanza_class.new(node.attributes if node) 

雖然程序員用來Ick的可能會寫:

stanza_class.new(node.maybe.attributes) 
0
stanza_class.new(*node.attributes)