我是红宝石的新手,我不明白一些例子
任何人都可以解释这个expession
redirect_to @message ? read_account_inbox_message_url(@message) : account_inbox_url
我是红宝石的新手,我不明白一些例子
任何人都可以解释这个expession
redirect_to @message ? read_account_inbox_message_url(@message) : account_inbox_url
如果@message
返回true
则重定向到read_account_inbox_message_url(@message)
url,否则重定向到account_inbox_url
它被称为三元运算符。它是的简写
redirect_to if @message
read_account_inbox_message_url(@message)
else
account_inbox_url
end
作为 if 语句,它检查条件的真实性并返回对第一部分或第二部分的评估。
它被称为三元运算符。这是说的简写:
if redirect_to @message is true
then
read_account_inbox_message_url(@message)
otherwise
account_inbox_url
语法是
test ? if_test_result_is_true_then_do_this : if_test_result_is_false_then_do_this
这是相同的:
if @message
read_account_inbox_message_url(@message)
else
account_inbox_url
end
?:
是一个三元条件表达式:
condition ? value_if_true : value_if_false
它是以下的简写:
if condition
value_if_true
else
value_if_false
end
在您的示例中,@message
是条件,read_account_inbox_message_url(@message)
是“真值”并且account_inbox_url
是“假值”。评估后,redirect_to
使用表达式的结果调用。
它相当于(我会这样写):
if @message
redirect_to read_account_inbox_message_url(@message)
else
redirect_to account_inbox_url
end
那是用作方法参数的三元表达式redirect_to
。
换句话说,它的意思是:redirect to read_account_inbox_message_url(@message) if @message is true, or, redirect_to account_inbox_url
三元表达式的格式为:expression ? evaluate_if_true : evaluate_if_false
.
此代码等效于:
redirect_to (@message ? read_account_inbox_message_url(@message) : account_inbox_url)
如果@message
是“真实的”(在 Ruby 中,除了nil
和之外的一切false
都是真实的),结果read_account_inbox_message_url(@message)
将作为参数传递给redirect_to
方法。否则account_inbox_url
结果将通过。