답변:
카운터의 최대 자릿수가 알려진 경우 (예 : 카운터 1..876의 경우 n = 3), 할 수 있습니다
str = "file_" + i.to_s.rjust(n, "0")
%
작동하지만 더 일반적인 목적입니다.
%
문자열과 함께 연산자를 사용하십시오 .
irb(main):001:0> "%03d" % 5
=> "005"
왼쪽은 printf 형식 문자열이며 오른쪽은 값 목록 일 수 있으므로 다음과 같은 작업을 수행 할 수 있습니다.
irb(main):002:0> filename = "%s/%s.%04d.txt" % ["dirname", "filename", 23]
=> "dirname/filename.0023.txt"
다음 은 형식 문자열을 구성하는 데 유용한 printf 형식 치트 시트 입니다. printf 형식은 원래 C
함수 printf
에서 왔지만 비슷한 형식 지정 함수는 perl, ruby, python, java, php 등에서 사용할 수 있습니다.
sprintf("%03d", 5)
.
String#next
카운터로 사용하십시오 .
>> n = "000"
>> 3.times { puts "file_#{n.next!}" }
file_001
file_002
file_003
next
상대적으로 '영리하다'는 의미는
>> n = "file_000"
>> 3.times { puts n.next! }
file_001
file_002
file_003
다른 답변에서 언급했듯이 "%03d" % number
꽤 잘 작동하지만 rubocop 루비 스타일 가이드에 위배됩니다 .
상당히 비밀스러운 String # % 방법에 비해 sprintf 및 별명 형식을 사용하는 것이 좋습니다
다음을 사용하여 더 읽기 쉬운 방식으로 동일한 결과를 얻을 수 있습니다.
format('%03d', number)
format
. 코드를 이해하기 쉽게 만드는 것이 목표라면 sprintf
표준 C 라이브러리의 일부이므로 를 사용해야합니다 . 이 이름은 프로그래밍 언어에서 사용됩니다. 더 많은 사람들이 그것이 무엇인지 이해하는 sprintf
것은 format
그것이 그것의 별명이라는 것을 아는 숫자에 비해 . 무언가가 RuboCop의 일부이기 때문에 본질적으로 옳고 그른 것이 아닙니다. 프로젝트에 가장 적합한 규칙을 선택하십시오. '%03d' % number
더 읽기 쉽습니다.
"%02d" % num
했습니다 . 그런 다음 보다 더 일반적인 것으로 결정 했기 때문에 rubocop.yml을 업데이트 하여 밤에 잘 자고 있습니다. sprintf(...)
format(...)
sprintf
format
Style/FormatString: EnforcedStyle: sprintf