Как инициализировать несколько массивов в одну строку в Ruby? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь сделать некоторые вычисления и получить массив групп и отделов оттуда. но если я возвращаю это так [], [] Это выдает ошибку, в то время как если я возвращаю это как [[], []], это работает нормально, но в последнем случае 3 массива получат инициализацию, которую я хочу избегать? Есть ли лучший способ сделать это с помощью самого массива 2?

    def fetch_group_dept_values
      if condition
        [1,2,3,], [4,5]
      else  
        [9,15], [10,11]
      end
    end

    groups, departments = fetch_group_dept_values 

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

если я верну его как [[],[]], он работает нормально, но в последнем случае инициализируются 3 массива, чего я хочу избежать?

Этого нельзя избежать, потому что Метод может возвращать только один объект.

Так что оборачивать объекты в [...] очень хорошо:

def fetch_group_dept_values
  if condition
    [[1, 2, 3,], [4, 5]]
  else  
    [[9, 15], [10, 11]]
  end
end

Затраты на создание (небольшого) дополнительного массив незначителен.

Однако вы могли бы избежать внешнего массива, получив значений вместо их возврата:

def fetch_group_dept_values
  if condition
    yield [1, 2, 3,], [4, 5]
  else  
    yield [9, 15], [10, 11]
  end
end

И вызвав его через:

fetch_group_dept_values do |groups, departments|
  # ...
end
1 голос
/ 17 апреля 2020

Используйте возврат впереди,

   def fetch_group_dept_values
      if condition
        return [1,2,3,], [4,5]
      else  
        return [9,15], [10,11]
      end
    end

    groups, departments = fetch_group_dept_values 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...