Я новичок в рубин и я не понимаю, какой примерПытаясь понять синтаксис рубина
может кто-нибудь объяснить этот 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
Это называется тройной оператор. Это обсчитывать за высказывание:
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
Это тройная выражение, используемое в качестве аргумента метода 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
.
Этот код eqivalent к:
redirect_to (@message ? read_account_inbox_message_url(@message) : account_inbox_url)
Если @message
является "truthy" (в Ruby, все, кроме nil
и false
является truthy), результат read_account_inbox_message_url(@message)
будет передан в качестве аргумента redirect_to
метода. В противном случае будет принят результат account_inbox_url
.
Это называется тернарный оператор. И это сокращение для
redirect_to 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
Это сокращенная, если оператор –
Параметр '@ message' не должны быть' true', он должен только быть «правдивость» (т. е. не «ноль», а не «ложь») –