Answers:
如果知道计数器中的最大位数(例如,对于计数器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等中也可以使用类似的格式化功能。
Kernel#sprintf
,在此处记录:ruby-doc.org/core-1.9.3/Kernel.html#method-i-sprintf
sprintf("%03d", 5)
。
您不能在连接文件名之前就使用值的字符串格式吗?
"%03d" % number
使用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
为sprintf(...)
,然后format(...)
根据RuboCop的建议进行了更改。然后,我认为它sprintf
比常规format
,所以用更新了rubocop.yml,Style/FormatString: EnforcedStyle: sprintf
现在我晚上睡得好。