【发布时间】:2010-09-30 05:00:08
【问题描述】:
<%if @item.rigged %>Yes<%else%>No<%end%>
我在想这样的事情吗?
if @item.rigged ? "Yes" : "No"
但它不起作用。 Ruby 有 ||=,但我什至不确定如何使用它。
【问题讨论】:
标签: ruby
<%if @item.rigged %>Yes<%else%>No<%end%>
我在想这样的事情吗?
if @item.rigged ? "Yes" : "No"
但它不起作用。 Ruby 有 ||=,但我什至不确定如何使用它。
【问题讨论】:
标签: ruby
从if @item.rigged ? "Yes" : "No" 中删除if
三元运算符的形式为condition ? if_true : if_false
【讨论】:
s/that/not that :)
在 Ruby 中,if 表达式的条件和then 部分必须由表达式分隔符(即; 或换行符)或then 关键字分隔。
所以,所有这些都可以工作:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Ruby 中还有一个条件运算符,但这完全没有必要。 C中需要条件运算符,因为它是一个运算符:在C中,if是一个语句,因此不能返回一个值,所以如果你想返回一个值,你需要使用可以 返回一个值。而 C 中唯一可以返回值的东西是函数和运算符,由于在 C 中不可能将 if 设为函数,因此您需要一个运算符。
然而,在 Ruby 中,if 是一个表达式。事实上,everything 在 Ruby 中是一个表达式,所以它已经可以返回一个值。条件运算符连存在都不需要,更不用说使用了。
顺便说一句:习惯上将用于提出问题的方法命名为末尾带有问号,如下所示:
@item.rigged?
这显示了在 Ruby 中使用条件运算符的另一个问题:
@item.rigged? ? 'Yes' : 'No'
多个问号彼此靠近,很难阅读。
【讨论】:
一行如果:
<statement> if <condition>
你的情况:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
【讨论】:
"No" unless @item.rigged 以防止!
item.rigged 为真,则返回nil 而不是'Yes'。如果条件不满足,单行 if 或 unless 语句返回 nil。
据我所知
3 单行
a = 10 if <condition>示例:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>示例:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>示例:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
希望对你有帮助。
【讨论】:
shell 和 C 单行结构都可以工作(ruby 1.9.3p429):
# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"
# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"
【讨论】:
if else 条件可以用三元运算符覆盖
@item.rigged? ? 'Yes' : 'No'
【讨论】:
为简单起见,如果您需要默认为 nil 的某个值,您可以使用:
@something.nil? = "No" || "Yes"
【讨论】:
您可以使用:
(@item.rigged) ? “是”:“否”
如果@item.rigged 为真,它将返回“是”,否则将返回“否”。
【讨论】:
if apple_stock > 1
:eat_apple
else
:buy_apple
end
上面的语句在ruby中可以用三元语句的形式写成:
apple_stock > 1 ? :eat_apple : :buy_apple
【讨论】:
别忘了它可以从 ruby 标签生成内容:
v
<%= @item.rigged? ? "Yes" : "No" %>
打勾(v)表示在html中使用等号生成文本。
【讨论】: