Se sua condição termina em um '?' é possível largar? Ou seja, se a condição for @ customer.sales.present? você pode largar o '?'? ... não se preocupe. Encontrei algum código que eu tinha e testei. A resposta é "não"
Jay Killeen
@JayKilleen Você está correto. Ruby tem tudo a ver com truques inteligentes, mas é tão inteligente (:
Nikita Rybak 23/01
1
@NikitaRybak s/that/not that :)
Austin
180
No Ruby, a condição e a thenparte de uma ifexpressão devem ser separadas por um separador de expressão ( ;ou seja, uma nova linha) ou pela thenpalavra - chave.
Há também um operador condicional no Ruby, mas isso é completamente desnecessário. O operador condicional é necessário em C, porque é um operador: em C, ifé uma instrução e, portanto, não pode retornar um valor; portanto, se você deseja retornar um valor, precisa usar algo que possa retornar um valor. E as únicas coisas em C que podem retornar um valor são funções e operadores e, como é impossível fazer ifuma função em C, você precisa de um operador.
Em Ruby, no entanto, ifé uma expressão. De fato, tudo é uma expressão em Ruby, portanto, ele já pode retornar um valor. Não é necessário que o operador condicional exista , muito menos usá-lo.
BTW: é usual nomear métodos que são usados para fazer uma pergunta com um ponto de interrogação no final, assim:
@item.rigged?
Isso mostra outro problema com o uso do operador condicional no Ruby:
@item.rigged??'Yes':'No'
É simplesmente difícil de ler com os vários pontos de interrogação que se aproximam.
Esta solução é diferente, pois retorna em nilvez de 'Yes'se item.riggedfor verdadeira. Instruções de linha única se ou a menos que retornem nilse a condição não for atendida.
Cão Essa é a melhor resposta - eu amo o quão sucintamente isso contrasta as três maneiras. Obrigado!
MrVocabulary 23/09
7
As construções de linha única shell e C funcionam (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"
Respostas:
Remover
if
deif @item.rigged ? "Yes" : "No"
O operador ternário tem forma
condition ? if_true : if_false
fonte
s/that/not that
:)No Ruby, a condição e a
then
parte de umaif
expressão devem ser separadas por um separador de expressão (;
ou seja, uma nova linha) ou pelathen
palavra - chave.Então, tudo isso funcionaria:
Há também um operador condicional no Ruby, mas isso é completamente desnecessário. O operador condicional é necessário em C, porque é um operador: em C,
if
é uma instrução e, portanto, não pode retornar um valor; portanto, se você deseja retornar um valor, precisa usar algo que possa retornar um valor. E as únicas coisas em C que podem retornar um valor são funções e operadores e, como é impossível fazerif
uma função em C, você precisa de um operador.Em Ruby, no entanto,
if
é uma expressão. De fato, tudo é uma expressão em Ruby, portanto, ele já pode retornar um valor. Não é necessário que o operador condicional exista , muito menos usá-lo.BTW: é usual nomear métodos que são usados para fazer uma pergunta com um ponto de interrogação no final, assim:
Isso mostra outro problema com o uso do operador condicional no Ruby:
É simplesmente difícil de ler com os vários pontos de interrogação que se aproximam.
fonte
Uma linha se:
Seu caso:
fonte
"No" unless @item.rigged
para impedir o!
nil
vez de'Yes'
seitem.rigged
for verdadeira. Instruções de linha única se ou a menos que retornemnil
se a condição não for atendida.Pelo que eu sei
3 one-liners
a = 10 if <condition>
exemplo:
a = 10 unless <condition>
exemplo:
a = <condition> ? <a> : <b>
exemplo:
Espero que ajude.
fonte
As construções de linha única shell e C funcionam (ruby 1.9.3p429):
fonte
se outra condição puder ser coberta com operador ternário
fonte
Por uma questão de simplicidade, se você precisar usar como padrão algum valor, se nulo, poderá usar:
fonte
Você pode usar ----
(@ item.rigged)? "Sim não"
Se @ item.rigged for true, ele retornará 'Yes'; caso contrário, retornará 'No'
fonte