我有两个要交换的类的实例。两个实例都是数组。我想使用类方法交换它们。如何从类方法中更改/访问实例self.collide
?
class MagicBus < Array
attr_writer :seating
def self.collide(bus1, bus2)
stored_arr1 = bus1
stored_arr2 = bus2
bus1 = stored_arr2
bus2 = stored_arr1
return bus1, bus2
end
end
def test_two_magic_buses_collide_and_swap_their_passengers
bus1 = MagicBus.new(["Mark","Dale","Peter"])
bus1_object_id = bus1.object_id
bus2 = MagicBus.new(["James","Patrick","Bardoe"])
bus2_object_id = bus2.object_id
MagicBus.collide(bus1, bus2)
assert_equal ["James","Patrick","Bardoe"], bus1
assert_equal bus1_object_id, bus1.object_id
assert_equal ["Mark","Dale","Peter"], bus2
assert_equal bus2_object_id, bus2.object_id
end
我已经尝试了下面的代码,但不起作用,但应该说明我正在尝试做什么。
def self.collide(bus1, bus2)
stored_arr1 = bus1
stored_arr2 = bus2
bus1 = stored_arr2
bus2 = stored_arr1
self.bus1 = bus2
self.bus2 = bus1
end
测试结果是...
....E
Error:
TestMagicBus#test_two_magic_buses_collide_and_swap_their_passengers:
NoMethodError: undefined method `bus1=' for MagicBus:Class
magic_bus.rb:56:in `collide'
magic_bus.rb:126:in `test_two_magic_buses_collide_and_swap_their_passengers'