방금 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"
첫번째 I에서 차이가 엔드 포인트의 포함에 줄 알았는데,하지만 난에 보였다 API 문서에, 그것이 여부 상관하는 것 같지 않았어요 ..
나 ...
: 그것은 항상 엔드 포인트를 포함.
그러나 irb에서 몇 가지 테스트를 수행했으며 ..
두 끝점을 모두 ...
포함하고 하한은 포함하고 상한은 포함하지 않는 것으로 나타났습니다 . 이 올바른지?
답변
범위에 대한 문서는 † 이 말한다 :
..
처음부터 끝까지 실행을 사용하여 구성된 범위 입니다. 사용하여 생성 된 항목...
은 최종 값 을 제외합니다.
그래서 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
† 이것을 포함하지 않았던 문서는 대신 Ranges에 대한 Pickaxe 섹션을 읽어야합니다 . 이 업데이트에 주목 해 주신 @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