루비에서 조건 연산자(? :)는 어떻게 사용하나요?
조건 연산자는 어떻습니까?? :
) Ruby에서 사용됩니까?
예를 들어, 이것이 맞습니까?
<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>
이것은 3진 연산자이며, C와 같이 작동합니다(괄호는 필요하지 않습니다).이것은 다음과 같이 작동하는 표현입니다.
if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this
하지만, 루비에서if
는 표현이기도 합니다.if a then b else c end
===a ? b : c
우선 순위 문제를 제외하고.둘 다 표현입니다.
예:
puts (if 1 then 2 else 3 end) # => 2
puts 1 ? 2 : 3 # => 2
x = if 1 then 2 else 3 end
puts x # => 2
첫 번째 경우 괄호가 필요합니다(그렇지 않으면 Ruby는 그것이 그렇다고 생각하기 때문에 혼란스럽습니다).puts if 1
추가적인 정크가 포함됨), 그러나 위에서 언급한 문제가 발생하지 않기 때문에 마지막 경우에는 필요하지 않습니다.
여러 줄에서 읽기 쉽도록 "long-if" 양식을 사용할 수 있습니다.
question = if question.size > 20 then
question.slice(0, 20) + "..."
else
question
end
puts true ? "true" : "false"
=> "true"
puts false ? "true" : "false"
=> "false"
ERB를 사용하면 레일에 있는 것 같습니다.그렇다면 다음과 같은 작업을 수행할 기본 제공 도우미를 고려해 보십시오.
<% question = truncate(question, :length=>30) %>
@pst는 훌륭한 답변을 주었지만, Ruby에서 3진 연산자는 우리가 여러 줄로 쓸 수 있는 Perl과 C와는 달리 구문적으로 정확하도록 한 줄에 쓰여져 있습니다.
(true) ? 1 : 0
일반적으로 루비는 여러 줄로 분할하려고 하면 오류를 발생시키지만, 사용할 수 있습니다.\
줄 끝에 줄 연속 기호가 있으면 Ruby는 행복해질 것입니다.
(true) \
? 1 \
: 0
이것은 간단한 예이지만 코드를 잘 배치하기 때문에 긴 줄을 다룰 때 매우 유용할 수 있습니다.
연산자를 줄 위에 마지막으로 배치하여 줄 연속 문자 없이 3진법을 사용할 수도 있지만, 저는 그것을 좋아하거나 추천하지 않습니다.
(true) ?
1 :
0
조건부 테스트 및/또는 결과가 길어짐에 따라 코드를 읽기가 매우 어렵다고 생각합니다.
헷갈리니까 삼원 연산자를 사용하지 말라는 댓글을 읽었는데, 그것은 무언가를 사용하지 않는 나쁜 이유입니다.같은 논리로 정규식, 범위 연산자(')를 사용해서는 안 됩니다...
그리고 겉으로 보기에 알려지지 않은 "스캐너-플롭" 변형).올바르게 사용하면 강력하므로 올바르게 사용하는 법을 배워야 합니다.
당신은 왜 주변에 괄호를 두었습니까?
true
?
OP의 예를 생각해 보십시오.
<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>
조건부 테스트를 래핑하면 테스트를 시각적으로 구분하므로 읽기 쉽게 만들 수 있습니다.
<% question = (question.size > 20) ? question.question.slice(0, 20)+"..." : question.question %>
물론, 전체 예제는 빈 공간을 현명하게 추가하여 훨씬 더 읽기 쉽게 만들 수 있습니다.테스트되지 않았지만 다음과 같은 아이디어를 얻을 수 있습니다.
<% question = (question.size > 20) ? question.question.slice(0, 20) + "..." \
: question.question
%>
또는 좀 더 관용적으로 쓰여집니다.
<% question = if (question.size > 20)
question.question.slice(0, 20) + "..."
else
question.question
end
%>
가독성이 심각한 문제를 겪고 있다고 주장하는 것은 쉽습니다.question.question
도 마찬가지야
운영자가 플레이어의 ID가 1인지 확인하고 결과에 따라 적 ID를 설정하는 간단한 예
player_id=1
....
player_id==1? enemy_id=2 : enemy_id=1
# => enemy=2
그리고 저는 꽤 도움이 될 것 같은 주제에 대한 게시물을 발견했습니다.
가장 쉬운 방법:
param_a = 1
param_b = 2
result = param_a === param_b ? 'Same!' : 'Not same!'
이래param_a
(와) 하지 .param_b
다음에 그음에다.result
의 가치는 다음과 같습니다.Not same!
드condition ? statement_A : statement_B
는 와동합다니등다에 합니다.
if condition == true
statement_A
else
statement_B
end
언급URL : https://stackoverflow.com/questions/4252936/how-do-i-use-the-conditional-operator-in-ruby
'programing' 카테고리의 다른 글
Vuex - 5초마다 대용량 데이터 청크 폴링 시 메모리 누수/JS 힙 크기 (0) | 2023.06.17 |
---|---|
Python 스크립트의 파일 이름 및 줄 번호 (0) | 2023.06.17 |
루비에서 지도(&:name)는 무엇을 의미합니까? (0) | 2023.06.17 |
DeepL API를 사용하여 텍스트 번역 (0) | 2023.06.17 |
pthread_message 및 pthread_message (0) | 2023.06.17 |