私が持っている
banana_charge_1_bananas_sold = 0
banana_charge_2_bananas_sold = 0
banana_charge_3_bananas_sold = 0
banana_charge_4_bananas_sold = 0
banana_charge_5_bananas_sold = 0
そして
sale_ticket.banana_charge
これは 1 ~ 5 の整数です。
代わりに、sale_ticket.banana_charge をローカル変数名に挿入する方法はありますか
if sale_ticket.banana_charge == 1
banana_charge_1_bananas_sold += number_of_scanned_bananas
elsif sale_ticket.banana_charge == 2
banana_charge_2_bananas_sold += number_of_scanned_bananas
etc.
のように
banana_charge_&^{sale_ticket.banana_charge}_bananas_sold += number_of_scanned_bananas
技術的にはメタプログラミングを使用して可能です。
# frozen_string_literal: true
# pseudo-code
number_of_bananas = 5
number_of_bananas.times do |i|
define_method "banana_charge_#{i + 1}_bananas_sold" do
local_variable_get("banana_charge_#{i + 1}_bananas_sold")
end
define_method "banana_charge_#{i + 1}_bananas_sold=" do |number_sold|
local_variable_set("banana_charge_#{i + 1}_bananas_sold", number_sold)
end
end
banana_charge_1_bananas_sold = 10
banana_charge_2_bananas_sold = 10
banana_charge_3_bananas_sold = 10
banana_charge_4_bananas_sold = 10
banana_charge_5_bananas_sold = 10
puts banana_charge_1_bananas_sold
ただし、この目的のために設計されたデータ型が存在するため、これは非常に不適切な設計です。
配列を使用し、あなたが達成しようとしていることに基づいて、次のようにします。
# frozen_string_literal: true
# pseudo-code
number_of_bananas_sold = [1, 2, 3, 4, 5]
number_of_bananas_sold[4] #=> 5
number_of_bananas_sold[sale_ticket.banana_charge] += number_of_scanned_bananas