我有
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
有什么方法可以将 sale_ticket.banana_charge 插入局部变量名称中,而不是去
技术上是使用元编程。
# frozen_string_literal: true
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
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