[ruby] 명령문이 작동하지 않는 경우 한 줄

<%if @item.rigged %>Yes<%else%>No<%end%>

이런 식으로 생각하고 있었습니까?

if @item.rigged ? "Yes" : "No" 

그러나 작동하지 않습니다. 루비는 ||=있지만 그 사용법을 잘 모르겠습니다.



답변

제거 if에서if @item.rigged ? "Yes" : "No"

삼항 연산자 양식 condition ? if_true : if_false


답변

Ruby에서 조건과 표현식 의 then일부 if는 표현식 구분 기호 (예 : ;개행 문자) 또는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에서 값을 반환 할 수있는 유일한 것은 함수와 연산자이며 만드는 것이 불가능하기 때문에if C에서 함수 연산자가 필요합니다.

그러나 루비에서는 if표현입니다. 실제로 모든 것이 Ruby의 표현식이므로 이미 값을 반환 할 수 있습니다. 조건부 연산자도 존재할 필요가 없습니다. 그것을 사용 혼자하자.

BTW : 끝에 물음표와 함께 질문을하는 데 사용되는 메소드의 이름을 지정하는 것이 일반적입니다.

@item.rigged?

이것은 Ruby에서 조건부 연산자를 사용할 때의 또 다른 문제를 보여줍니다.

@item.rigged? ? 'Yes' : 'No'

서로 가까이있는 여러 개의 물음표로 읽기가 어렵습니다.


답변

다음과 같은 경우 한 줄 :

<statement> if <condition>

너의 경우:

"Yes" if @item.rigged

"No" if !@item.rigged # or: "No" unless @item.rigged


답변

내가 아는 것에서

원 라이너 3 개

  1. a = 10 if <condition>

예:

a = 10 if true # a = 10
b = 10 if false # b = nil
  1. a = 10 unless <condition>

예:

a = 10 unless false # a = 10
b = 10 unless true # b = nil
  1. a = <condition> ? <a> : <b>

예:

a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100

도움이 되길 바랍니다.


답변

쉘과 C 단선 구성은 모두 작동합니다 (루비 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"


답변

다른 조건이 3 진 연산자로 처리 될 수있는 경우

@item.rigged? ? 'Yes' : 'No'


답변

간단하게하기 위해 nil 인 경우 기본값으로 설정해야하는 경우 다음을 사용할 수 있습니다.

@something.nil? = "No" || "Yes"