범위 생성에서 '...'(더블 도트)와 '...'(트리플 도트)의 차이는 무엇입니까?
Ruby와 Ruby on Rails를 막 배우기 시작했고 범위를 사용하는 검증 코드를 발견했습니다.
validates_inclusion_of :age, :in => 21..99
validates_exclusion_of :age, :in => 0...21, :message => "Sorry, you must be over 21"
처음에는 엔드포인트를 포함하는 것에 차이가 있다고 생각했지만, 제가 조사한 API 문서에서, 그것이 그것인지 아닌지는 중요하지 않은 것처럼 보였습니다...또는...항상 엔드포인트를 포함했습니다.
하지만, 제가 irb에서 몇 가지 테스트를 했는데, 그것은 그것을 나타내는 것 같았습니다...두 엔드포인트를 모두 포함하는 동안...하한만 포함하고 상한은 포함하지 않습니다.이거 맞는건가요?
Range에 대한† 설명서에는 다음과 같이 나와 있습니다.
다음을 사용하여 구성된 범위
..처음부터 끝까지 총망라하다다음을 사용하여 생성된 항목...끝 값을 제외합니다.
그렇게a..b는 것과 같은a <= x <= b,반면에.a...b는 것과 같은a <= x < b.
참고로, 반면에to_a정수 범위에서는 정수 집합을 제공하며, 범위는 값 집합이 아니라 시작/종료 값 쌍입니다.
(1..5).include?(5) #=> true
(1...5).include?(5) #=> false
(1..4).include?(4.1) #=> false
(1...5).include?(4.1) #=> true
(1..4).to_a == (1...5).to_a #=> true
(1..4) == (1...5) #=> false
이전에는 문서에 이러한 내용이 포함되어 있지 않았으며, 대신 범위에 있는 곡괭이 섹션을 †읽어야 했습니다.이 업데이트를 알려주신 @MarkAmery(아래 참조)에게 감사드립니다.
그것이 맞아요.
1.9.3p0 :005 > (1...10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
1.9.3p0 :006 > (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
트리플-닷 구문은 덜 일반적이지만 다음보다 더 좋습니다.(1..10-1).to_a
이제 API 문서에서 이 동작을 설명합니다.
다음을 사용하여 구성된 범위
..처음부터 끝까지 총망라하다다음을 사용하여 생성된 항목...끝 값을 제외합니다.
즉, 다음과 같습니다.
2.1.3 :001 > ('a'...'d').to_a
=> ["a", "b", "c"]
2.1.3 :002 > ('a'..'d').to_a
=> ["a", "b", "c", "d"]
a...b 종료 값을 제외하는 동안a..b 끝 값을 포함합니다.
정수로 작업할 때,a...b처럼 행동함a..b-1.
>> (-1...3).to_a
=> [-1, 0, 1, 2]
>> (-1..2).to_a
=> [-1, 0, 1, 2]
>> (-1..2).to_a == (-1...3).to_a
=> true
>> (-1..2) == (-1...3)
=> false
이것은 부분 단계에서 증가할 때 볼 수 있습니다.
>> (-1..2).step(0.5).to_a
=> [-1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0]
>> (-1...3).step(0.5).to_a
=> [-1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5]
및 ...는 범위를 나타냅니다.
irb에서 보기만 하면 됩니다.
ruby-1.9.2-p290 :032 > (1...2).each do puts "p" end
p
=> 1...2
ruby-1.9.2-p290 :033 > (1..2).each do puts "p" end
p
p
언급URL : https://stackoverflow.com/questions/9690801/difference-between-double-dot-and-triple-dot-in-range-generation
'sourcecode' 카테고리의 다른 글
| Postgre를 시작하는 방법Mac OS X의 SQL 서버? (0) | 2023.06.03 |
|---|---|
| 앱이 순수한 스위프트 프로젝트에서 유닛 테스트를 실행하는지 어떻게 알 수 있습니까? (0) | 2023.06.03 |
| CodeDom 공급자 유형 "Microsoft.코드 돔.공급자.DotNetCompilerPlatform.CSSharpCodeProvider"를 찾을 수 없습니다. (0) | 2023.06.03 |
| Android에서 경고 대화 상자를 표시하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
| xcode에서 프로그래밍 방식으로 단추에 작업을 추가하는 방법 (0) | 2023.06.03 |