在控制器上声明实例变量的类型
Declare type of instance variable on controller
我在使用 Jennifer.cr 的 Amber 框架上有一个 crystal-lang 项目,但我的控制器出现此错误:
Can't infer the type of instance variable '@companies' of CompanyController
@companies = Company.all
控制器是:
class CompanyController < ApplicationController
def index
@companies = Company.all
render("index.slang")
end
end
当我尝试这样解决问题时:
class CompanyController < ApplicationController
def index
@companies : Array(Company) = Company.all
render("index.slang")
end
end
我遇到另一个错误:
instantiating 'CompanyController#index()'
in src/controllers/company_controller.cr:7: declaring the type of an instance variable must be done at the class level
@companies : Array(Company) = Company.all
我该如何解决这个 "easy" 问题?
您不必在此处使用实例变量。局部变量是 Amber 应用程序默认使用的一种方式(它们可以在视图中访问):
class CompanyController < ApplicationController
def index
companies = Company.all
render("index.slang")
end
end
但如果由于某种原因要使用实例变量,则需要在class级别或follow other type inference rules.
级别进行声明和初始化
如前所述,这里使用局部变量是最优雅的解决方案。对于最终出现类似错误消息但上下文不同的人,请阅读以下内容:
第二个错误消息已经指出了正确的解决方案,下面的代码也应该有效:
class CompanyController < ApplicationController
@companies : Array(Company)?
def index
@companies = Company.all
render("index.slang")
end
end
我在使用 Jennifer.cr 的 Amber 框架上有一个 crystal-lang 项目,但我的控制器出现此错误:
Can't infer the type of instance variable '@companies' of CompanyController
@companies = Company.all
控制器是:
class CompanyController < ApplicationController
def index
@companies = Company.all
render("index.slang")
end
end
当我尝试这样解决问题时:
class CompanyController < ApplicationController
def index
@companies : Array(Company) = Company.all
render("index.slang")
end
end
我遇到另一个错误:
instantiating 'CompanyController#index()'
in src/controllers/company_controller.cr:7: declaring the type of an instance variable must be done at the class level
@companies : Array(Company) = Company.all
我该如何解决这个 "easy" 问题?
您不必在此处使用实例变量。局部变量是 Amber 应用程序默认使用的一种方式(它们可以在视图中访问):
class CompanyController < ApplicationController
def index
companies = Company.all
render("index.slang")
end
end
但如果由于某种原因要使用实例变量,则需要在class级别或follow other type inference rules.
级别进行声明和初始化如前所述,这里使用局部变量是最优雅的解决方案。对于最终出现类似错误消息但上下文不同的人,请阅读以下内容:
第二个错误消息已经指出了正确的解决方案,下面的代码也应该有效:
class CompanyController < ApplicationController
@companies : Array(Company)?
def index
@companies = Company.all
render("index.slang")
end
end