Ruby метод с неопределенным количеством аргументов - PullRequest
0 голосов
/ 22 января 2020

Я работаю по бесплатной ruby учебной программе App Academy и у меня возникают проблемы с методами, которые принимают несколько аргументов.

Метод:

  should accept any number of arrays of the same length as arguments
  should return a 2D array where each subarray contains the elements at the same index from each argument

Я пробовал разбить это на части используя метод Array # zip, но я не уверен, как написать его, когда есть неопределенное количество аргументов.

def zip(array, *arrays)
    array.zip(arrays)
end

Вышеуказанный метод работает, когда я ввожу только два аргумента, но когда вы добавляете больше кроме этого, он производит непреднамеренный вывод.

Должен выдать:

describe "zip" do
    let(:array_1) { ['a', 'b', 'c'] }
    let(:array_2) { [1, 2, 3] }
    let(:array_3) { ['w', 'x', 'y'] }

    it "should accept any number of arrays of the same length as arguments" do
        expect { zip(array_1) }.to_not raise_error
        expect { zip(array_1, array_2) }.to_not raise_error
        expect { zip(array_1, array_2, array_3) }.to_not raise_error
    end

    it "should return a 2D array where each subarray contains the elements at the same index from each argument" do
        expect(zip(array_1, array_2)).to eq([
            ["a", 1],
            ["b", 2],
            ["c", 3]
        ])

        expect(zip(array_2, array_1)).to eq([
            [1, "a"],
            [2, "b"],
            [3, "c"]
        ])

        expect(zip(array_1, array_2, array_3)).to eq([
            ["a", 1, "w"],
            ["b", 2, "x"],
            ["c", 3, "y"]
        ])
    end
end

Может кто-нибудь помочь мне с этим? Мне кажется, что я не определяю свой метод должным образом, но я не уверен.

1 Ответ

1 голос
/ 22 января 2020

Вам нужно разделить переменную arrays до аргументов:

def zip(array, *arrays)
  array.zip(*arrays)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...