[英]increment by one ruby string interpolation loop
每次在條形碼數組中收集data
時,我都試圖使data
變量遞增 1。
def generate_barcode
batch_number = params[:batch_number].to_i
business_partner_id = params[:business_partner].to_i
current_business_partner = BusinessPartner.find(business_partner_id)
serial_number = "00000000"
final_value = current_business_partner.partner_code << serial_number
barcodes = batch_number.times.collect {
data = "#{final_value + '1'}"
Barby::EAN13.new(data) #currently collecting the same object batch number of times with data value being the same......
}
end
每次收集發生時如何將data
增加 1?
Ruby 有一個方便的輔助方法用於“遞增”字符串,稱為succ
/ succ!
. 觀察:
serial_number = "00000000"
15.times { puts serial_number.succ! }
# >> 00000001
# >> 00000002
# >> 00000003
# >> 00000004
# >> 00000005
# >> 00000006
# >> 00000007
# >> 00000008
# >> 00000009
# >> 00000010
# >> 00000011
# >> 00000012
# >> 00000013
# >> 00000014
# >> 00000015
思考這個:
5.times { |i| i } # => 5
5.times.collect{ |i| i * 2 } # => [0, 2, 4, 6, 8]
為文檔times
顯示它通過每個迭代了時間的值。
迭代給定的塊 int 次,將值從 0 傳遞到 int - 1。
你的問題不容易理解,因為不清楚你想完成什么。 據我了解,您要增加“00000000”>“00000001”等。
為此,您可以使用String.rjust :
number_of_digits = 8
serial_number = 0 # Use an integer!!!
barcodes = batch_number.times.collect {
serial_number += 1
data = serial_number.to_s.rjust(number_of_digits, '0')
# Do what you want with data
}
最好的祝願!
更新: Sergio Tulentsev 的回答也非常方便,對於這個問題甚至更優雅,但如果你想更好地控制序列號,這就是方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.