Ruby의 범위는 무엇이며 어떻게 작동합니까?
범위는 시작 값과 끝 값이 있는 개체이며 이 두 값 사이의 전체 범위에 걸쳐 있는 시퀀스를 만드는 데 도움이 됩니다.
1
에서 이동할 수 있습니다. 20
으로 또는 "a"
에서 "z"
로 .
이 기사에서 알게 될 내용 :
- Ruby 범위를 만드는 방법
step
사용 방법 &include?
Ruby의 메소드- 범위가 내부적으로 작동하는 방식
해보자!
범위 이해
참고로 Ruby 범위 구문은 다음과 같습니다.
(1..20)
괄호는 Range
를 정의하는 데 필요하지 않습니다. .
그러나 범위에서 메서드를 호출하려면 해당 메서드가 필요합니다. 그렇지 않으면 범위 자체가 아니라 범위의 두 번째 요소에서 메서드를 호출하는 것입니다.
Range
클래스에는 Enumerable이 포함되어 있으므로 범위를 배열로 변환하지 않고도 모든 강력한 반복 방법을 얻을 수 있습니다.
루비 단계 방법
Range
step
과 같은 몇 가지 유용한 방법이 있습니다. 방법.
예 :
(10..20).step(2).to_a# [10, 12, 14, 16, 18, 20]
이 방법을 사용하면 n
단위로 범위를 반복할 수 있습니다. , 여기서 n
step
에 전달된 인수입니다. .
숫자가 범위 안에 있는지 확인하는 방법
기타 Range
주의해야 할 메소드는 다음과 같습니다. cover?
&include?
.
같은 일을 하지 않기 때문에 같은 일을 한다고 생각하면 오산입니다.
include?
메서드는 예상한 대로 수행하므로 범위 내에 포함되는지 확인합니다. 따라서 Range
를 확장하는 것과 같습니다. Array
로 그리고 거기에 무언가가 있는지 확인합니다.
하지만 cover?
다르며 범위의 초기 및 종료 값을 확인하는 것뿐입니다. (begin <= obj <= end
), 예기치 않은 결과를 초래할 수 있습니다.
예 :
('a'..'z').include? "cc" # false('a'..'z').cover? "cc" # 참
cover?
예는 다음과 같습니다.
"a" <="cc" &&"cc" <="z"
true
를 반환하는 이유 문자열을 문자별로 비교한다는 것입니다. . "a"가 "c" 앞에 오기 때문에 첫 번째 "c" 뒤에 오는 문자는 중요하지 않습니다.
Ruby에서 범위를 구현하는 방법
범위는 숫자 및 문자로 제한되지 않으며 다음 방법을 구현하는 한 모든 개체를 사용할 수 있습니다. <=>
그리고 succ
.
예를 들어 다음은 DateTime 범위입니다.
require 'time't1 =DateTime.newt2 =DateTime.new + 30next_30_days =t1..t2# 예제 usenext_30_days.select(&:friday?).map(&:day)
어떻게 작동합니까? 이 구현을 살펴보겠습니다.
def range(a, b) # 첫 번째 요소가 두 번째 요소보다 크면 # 순차 범위가 아닙니다. return [] if a> b out =[] # 두 번째 요소가 같을 때까지 진행 # a !=b out <진행 상황을 이해하는 데 도움이 되도록 몇 가지 의견을 추가했습니다.
아이디어는 첫 번째 개체에서 다음 메서드를 두 번째 개체와 같을 때까지 계속 호출한다는 것입니다. 이 메서드는 결국 만날 것이라는 가정입니다.
사용자 정의 클래스 범위
대부분의 경우 숫자 및 문자 범위를 사용하지만 사용자 정의 클래스에서 범위를 사용하는 방법을 아는 것은 여전히 좋습니다.
예 :
class LetterMultiplier attr_reader :count include Comparable def initialize(letter, count) @letter =letter @count =count end def succ self.class.new(@letter, @count + 1) end def <=>(기타) count <=> other.count endenda =LetterMultiplier.new('w', 2)b =LetterMultiplier.new('w', 8)# rangep Array(a..b)사전>여기서 핵심은
<=>
&succ
올바른 방법입니다.
include?
를 사용하려면Comparable
==
와 같은 메소드를 추가하는 모듈 ,<
, 및>
(모두<=>
의 결과를 기반으로 함 방법).결론
이 기사에서는 범위를 더 잘 이해하고 범위 연산을 지원하는 고유한 객체를 구현할 수 있도록 Ruby에서 범위가 작동하는 방식을 배웠습니다.
다음 게시물을 놓치지 않도록 아래 뉴스레터 구독을 잊지 마세요 🙂