범위 생성에서 '...'(더블 도트)와 '...'(트리플 도트)의 차이는 무엇입니까?
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 |