2016-01-20 14 views
-4

寻找一种在哈希分配中包含三元条件的方法。红宝石三元内部哈希版本

a = 5 
h = {} 
h[:alpha] => a > 3 ? true : false # edited twice 
h[:alpha] => (a > 3 ? true : false) # edited twice 

必须有一种方法来缩短这一点。

+0

你是不是指'h [:alpha =(a> 3?true:false)'? – eugen

+0

是的,我很抱歉。我在解决这个问题之前开始了这个问题。 –

+1

你是什么意思的“不工作”?这两个代码片段都将'true'分配给'h [:alpha]。你得到的行为是什么?你期望的行为是什么?什么是你正在得到确切的错误信息? –

回答

2

您需要使用=(赋值运算符)而不是=>赋值。

尝试:

h[:alpha] = a > 3 ? true : false 

例子:

2.1.2-perf :001 > a = 5 
=> 5 
2.1.2-perf :002 > h = {} 
=> {} 
2.1.2-perf :005 > h[:alpha] = (a > 3 ? true : false) 
=> true 
2.1.2-perf :006 > h[:alpha] 
=> true 

编辑(按您的意见):

2.1.2-perf :014 > user = [1,2,3,4,5] 
=> [1, 2, 3, 4, 5] 
2.1.2-perf :016 > user[1] == "solo" ? "#{user[2]} #{user[3]} (s)" : "#{user[4]} (g)" 
=> "5 (g)" 
+0

这是我目前的问题,在不同的语法:\t \t {:type => user [1], :name => user [1] .to_s ==“solo”? “#{user [2] user [3](s)}”:“#{user [4](g)}”, –

+0

您需要使用'“#{user [2]}#{user [3] }(s)“'如果这是你所期待的 – Atri

+0

已将其更改为此,并挂载在#{user [2]}上。用户[1] ==“独唱”?放置“#{user [2]}#{user [3]}(s)”:放置“#{user [4]}(g)” –

4

几乎总是当一个初学者使用文字truefalse,这是不必要的。在这种情况下,你根本不需要三元组。

a = 5 
h = {} 
h[:alpha] = a > 3 
h[:alpha] # => true 
+0

这是测试复合三元组。实际情况不同,这在上面的评论中。 –

+4

@Rich_F不要在评论中提供重要信息。将其添加到您的问题中以清楚说明。 – sawa

+0

@Rich_F也复合三元使代码气味。如果逻辑需要的不仅仅是一个如果其他三元不是最好的解决方案,而且你最好写一个方法来处理这个问题,那么很难读懂和解释。 – engineersmnky