Ruby의 Enumerableeach 진도를 표시하는 방법
6949 단어 Ruby
컨디션
이루어지다
표준 출력에 진도를 표시하는 방법
Enumerable.each_with_progress
을 추가했습니다.index.rb
module Enumerable
def each_with_progress(&block)
self.each_with_index do |element, index|
print "\r#{index + 1}/#{self.length}"
block.call(element, index)
end
print "\r\n"
end
end
print
문장을 수정하면 비례로 표시할 수 있고 많은 일을 할 수 있다고 생각합니다.호출단 코드
index.rb
puts "# program start"
['a','b','c'].each_with_progress do |elem|
sleep 1
print " #{elem}"
end
['a','b','c'].each_with_progress do |elem, index|
sleep 1
print " #{index} -> #{elem}"
end
puts "# program end"
실행 결과
$ ruby index.rb
# program start
3/3 c
3/3 2 -> c
# program end
Enumerable를 통한 구현
상술한 예는 수조 등
length
방법으로 정의된 클래스에서만 사용할 수 있다.Enumerable
length
에서 실현되지 않은 클래스(예를 들어 범위 대상 등)에서는 length
로 대체Enumerable.count
를 사용한다.index.rb
module Enumerable
def each_with_progress(&block)
length = self.respond_to?(:length) ? self.length : self.count
self.each_with_index do |element, index|
print "\r#{index + 1}/#{length}"
block.call(element, index)
end
print "\r\n"
end
end
이렇게 하면 Enumerable 모듈이 상속된 객체에서 수행할 수 있습니다.호출단 코드
index.rb
puts "# program start"
sum = 0
(1..10000).each_with_progress do |elem|
sum += elem
end
puts sum
puts "# program end"
실행 결과
$ ruby index.rb
# program start
10000/10000
50005000
# program end
참고 자료
Reference
이 문제에 관하여(Ruby의 Enumerableeach 진도를 표시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzuki_sh/items/bec894d8f468fd486dad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)