簡體   English   中英

增加一個 ruby​​ 字符串插值循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM