У меня интересная проблема с относительно простым заданием ниже. Каждый из блоков в скобках в начале оценивается как nil , оставляя Rubygame::Surface.new
в качестве значения, которому @image
должно быть присвоено. К сожалению, на следующей строке, где я установил @rect
, он выдает NoMethodError , потому что @image
равен nil .
@image = (image unless image.nil?) or
(Rubygame::Surface.autoload(image_file) unless image_file.nil?) or
(Rubygame::Surface.autoload("#{@name}.png") unless @name.nil?) or
Rubygame::Surface.new([16, 16])
@rect = Rubygame::Rect.new [0, 0], [@image.width, @image.height]
Подобные тесты выполняются в IRB, как и ожидалось, поэтому я вполне уверен, что оператор 'or' правильно сформирован, но я не могу понять, почему он не возвращает новую поверхность, когда все остальное ноль .