Фокус 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
, и вам нужно будет прибегнуть к другим библиотекам / фреймворкам или получить грязные записи кода, специфичного для ОС.
Ошибка заключается в том, что когда контроллер выполняет другое действие, переменные экземпляра, подобные этому, не обязательно переносят / получают набор, а любая неопределенная переменная экземпляра по умолчанию принимает значение 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
сводится к виду.