2011-05-04 45 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对象。