2011-11-30 48 views
1

有没有更好的方式来写在Ruby中,没有写“酒吧”两次?红宝石成语默认值

foo = bar > 0 ? bar : 1 
+0

我不能回答我的问题8小时,而是:富= [巴,1。最大 – dooche

+0

假设它是一个整数,肯定的是,虽然我不相信这是更好的。 –

+0

@ miku的答案实际上是Ruby比较常见的答案。 – Nick

回答

4

不是一般的使用情况,但:

foo = [bar, 1].max 
3
$ irb 

>> x ||= "default" 
=> "default" 

>> x ||= "nothing changes, since x has been defined" 
=> "default" 

x的值将与“默认”来代替,但只有当x是零或假的。所以我不确定它是否适合您的使用案例(x > 0)

x ||= "default"只是x || x = "default"的简写。

+0

技术上'x || =“default”'是'x = x ||的简写形式“默认”,无论如何,这意味着同样的事情。 –

+1

@LBg:不是,它是'x || x =“默认”。请参阅http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html –

+2

@AndrewGrimm:我刚跑过'定义? x || =“”#=>“赋值”','定义? x = x || “”#=>“赋值”和“定义? x || x =“”#=>“表达式”'。但是,是的,你说得对,谢谢。 –