Одна вещь, которая помогает отделиться правильно, избегает "локальных переменных передачи от контроллера для просмотра" антишаблона. Вместо этого:
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
def show
@foo = Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= @foo.bar %>
...
Попытка, перемещающая его к методу get, который доступен как вспомогательный метод:
# app/controllers/foos_controller.rb:
class FoosController < ApplicationController
helper_method :foo
def show
end
protected
def foo
@foo ||= Foo.find(...)
end
end
#app/views/foos/show.html.erb:
...
<%= foo.bar %>
...
Это облегчает изменять то, что вставляется в "@foo" и как он используется. Это увеличивает разделение между контроллером и представлением, не делая их больше сложными.
Даже если бы они были там, этот код не работал бы, потому что он присваивает список инициализатора, который еще не является вектором, существующему объекту с именем 'tmp'. Вы можете назначить векторы следующим образом:
vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns
или
std::initializer_list<int> iniList = {1,2,3,4,5,6};
, но не
std::vector<int> tmp;
tmp = {...}; // calls assignment operator
. Кстати, эта функция все еще отсутствует в VS2012.