class Zone property level_info : Int32 def initialize(map_id, player) player.in_zone_obj = self @level_info = map_id end end class Client property in_zone_obj : Zone? end player = Client.new Zone.new(1, player)
Error: instance variable ‘@level_info’ of Zone was not initialized directly in all of the ‘initialize’ methods, rendering it nilable. Indirect initialization is not supported.
@level_info is placed above
player.in_zone_obj = self, there is no error.
However, even if
@level_info is placed above, this still works:
if zone = player.in_zone_obj pp zone.level_info end
Because it’s a reference.
So, what can I takeaway from this? If assigning a class reference to an
ivar, it must be done at the very end of the
initialize method, correct?