undefined метод `each 'для nil: NilClass, но я использовал переменную экземпляра

Фокус Boost пытается использовать новые методы и внедрять новые возможности. В центре внимания стандарта C ++ указаны требования таким образом, что (в большинстве случаев) можно реализовать портативно. Ряд возможностей от boost нашли свой путь в стандарт C ++, но часто менялись в этом переходе - для улучшения переносимости, иногда повышения надежности и т. Д.

Если ваша реализация (компилятор и библиотека ) - это C ++ 11 или более поздняя версия, и вы намерены не переносить старые версии, а затем использовать std::mutex. Это часть стандарта, начиная с 2011 года, поэтому предпочтительнее. Не нужно полагаться на сторонние библиотеки. Вам понадобится только увеличение, если вам нужны дополнительные эффекты повышения эффективности, которые не поддерживаются стандартом C ++ (что означает другие вещи, кроме mutex).

Некоторые исключения из вышеизложенного: есть некоторые особенности повышения (включая связанные с потоками и мьютексами), которые не попали в стандарт C ++ и некоторые функции в стандарте C ++, которые не находятся в режиме boost.

Если вам нужно использовать (или поддержку или порт к) более старой реализации, а затем рассмотрим использование boost::mutex. В большинстве случаев вам потребуется установить версию boost отдельно с выбранной вами реализацией (некоторые версии компилятора поставляются с версией boost, но не полагаются на нее). Если нет версии boost, которая работает с вашим компилятором / библиотекой, тогда (чтобы указать очевидное) вы не сможете использовать boost::mutex.

Boost имеет библиотеку потоков (которая включает mutex), начиная с версии 1.25.0, которая датируется с конца 2001 года. Что предлагает boost - это вариант, если ваш компилятор не старше (приблизительное предположение) в начале 2000-х годов.

Если вам нужно поддерживать реализация, которая значительно старше, чем в начале 2000-х годов, вам может быть не повезло с помощью boost::mutex, и вам нужно будет прибегнуть к другим библиотекам / фреймворкам или получить грязные записи кода, специфичного для ОС.

0
задан Ellie 19 January 2019 в 22:19
поделиться

1 ответ

Ошибка заключается в том, что когда контроллер выполняет другое действие, переменные экземпляра, подобные этому, не обязательно переносят / получают набор, а любая неопределенная переменная экземпляра по умолчанию принимает значение nil. Предполагая, что это представление списка на ResultsController#show, один вариант будет для ResultsController выглядеть примерно так:

before_action :a_list, only: :show

def show
  # Any other code for show
end

def a_list
  list = Gibbon::Request.lists("9225cefb61").members.retrieve(params: {"fields": "members.email_address"})
  list_hash = list.body
  @result_array =  list_hash['members'].map { |ea| ea['email_address'] }
end

При этом используются встроенные Rails Filters для обработки выполнение цепочки сообщений при отображении вашего представления. Поскольку #a_list выполняется до #show, значение @result_array сводится к виду.

0
ответ дан Justin P. 19 January 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: