多维数组 - “初始化”:参数数量错误(1 代表 0)

Multidimestional Array - `initialize': wrong number of arguments (1 for 0)

我在 ruby rails 中还是新人。今天我正在尝试编写一些代码,这些代码可以 运行 以下内容:

image = Image.new([
  [0, 0, 0, 0],
  [0, 1, 0, 0],
  [0, 0, 0, 1],
  [0, 0, 0, 0]
])

image.output_image

我在设置初始化时遇到问题。我的代码如下,有人可以帮我吗? 非常感谢

class Subary
    attr_accessor :num1, :num2, :num3, :num4

    def initialize (num1, num2, num3, num4)
        self.num1 = num1
        self.num2 = num2
        self.num3 = num3
        self.num4 = num4
    end

    def output_subary
        puts "#{num1}#{num2}#{num3}#{num4}"
    end

end

# subary = Subary.new(0,0,0,0)
# puts subary.output_subary

class Image
    def initialize 
        @subarys = []
        @subarys << Subary.new(:num1, :num2, :num3, :num4)
        @subarys << Subary.new(:num1, :num2, :num3, :num4)
        @subarys << Subary.new(:num1, :num2, :num3, :num4)
        @subarys << Subary.new(:num1, :num2, :num3, :num4)
    end

    def output_image
        @subarys.each do |list|
            list.output_subary
        end
    end
end

image = Image.new([
  [0, 0, 0, 0],
  [0, 1, 0, 0],
  [0, 0, 0, 1],
  [0, 0, 0, 0]
])
image.output_image
`initialize': wrong number of arguments (1 for 0)

此错误意味着,initialize 方法不接受任何参数 (0),但您向它传递了一个参数。在 Image class 中更改 initialize 方法的定义。然后,它应该工作。

class Subary
    attr_accessor :num1, :num2, :num3, :num4

    def initialize(sub_array)
        self.num1 = sub_array[0]
        self.num2 = sub_array[1]
        self.num3 = sub_array[2]
        self.num4 = sub_array[3]
    end

    def output_subary
        puts "#{num1}#{num2}#{num3}#{num4}"
    end
end

# subary = Subary.new(0,0,0,0)
# puts subary.output_subary

class Image
    def initialize(array_of_arrays)
        @subarys = []
        @subarys << Subary.new(array_of_arrays[0])
        @subarys << Subary.new(array_of_arrays[1])
        @subarys << Subary.new(array_of_arrays[2])
        @subarys << Subary.new(array_of_arrays[3])
    end

    def output_image
        @subarys.each do |list|
            list.output_subary
        end
    end
end

image = Image.new([
  [0, 0, 0, 0],
  [0, 1, 0, 0],
  [0, 0, 0, 1],
  [0, 0, 0, 0]
])
image.output_image
# => 0000
# => 0100
# => 0001
# => 0000