2011-05-04 40 views
4

我有一個很短的問題。是否可以初始化一個哈希像這樣的東西:自己內部引用散列項

row = { 
    :title => "row title", 
    :slug => row[:title].paremeterize 
} 

換句話說,我能以某種方式引用其自身內部的未初始化散列或我必須這樣做,這樣說:

row = { 
    :title => "row title" 
} 
row[:slug] = row[:title].paremeterize 

感謝評論。當然,這段代碼不起作用。我問是否有類似的方式,可能是用不同的語法。紅寶石一直是充滿驚喜的我:)

+1

這似乎是一個簡單的, 「你有沒有嘗試過了,如果是的話會發生什麼?」題。不要聽起來那麼尖銳,但除了嘗試它之外,我們還有什麼要做,並告訴你它是成功還是失敗? – jefflunt 2011-05-04 17:00:53

回答

6

你正在以相當奇怪的方式解決這個問題。試着去思考當你試圖以很少記錄(或不可能)的方式使用語言的情況下你在做什麼。

title = "foobar" 

row = { 
    :title => title, 
    :slug => title.parameterize 
} 

更妙的是...

class Row 
    attr_accessor :title 

    def slug; title.parameterize; end 
end 

foo = Row.new :title => 'foo bar' 
foo.slug #=> "foo-bar" 
+0

噢......我現在覺得很蠢%% – bassneck 2011-05-04 17:14:08

+0

+1級的方法。也許你的意思是「class Row tokland 2011-05-04 17:16:27

+0

有太多好方法可以做到這一點。我使用了基礎知識,但是如果每行只是結構化數據,那麼從結構體繼承的類可能是一個不錯的選擇。 – coreyward 2011-05-04 17:38:23

0

如果您在IRB以下,

row = { 
    :title => "row title", 
    :slug => row[:title] 
} 

你的錯誤NoMethodError: undefined method '[]' for nil:NilClass。所以不,你不能這樣做,因爲row尚未完全初始化,並且是nil對象。