[英]What does this alias in Elixir do?
https://github.com/wojtekmach/acme_bank/blob/master/apps/bank/lib/bank/model.ex#L10
alias Bank.{
Account,
Customer,
Deposit,
Ledger,
Repo,
Transfer,
Entry
}
没有它,我会得到一个Ecto.Queryable not implemented for Foo, the given module does not exist
。 如何将 Ecto 查询内容引入模型?
这相当于做
alias Bank.Account
alias Bank.Customer
alias Bank.Deposit
alias Bank.Ledger
alias Bank.Repo
alias Bank.Transfer
alias Bank.Entry
当您有多个以相同前缀开头的模块时,此表单仅允许您保存一些击键。
至于你的错误,代码可能正在做类似的事情
Repo.all(from a in Account)
并且由于您评论/删除了此别名, Account
不再具有任何意义。
在 Elixir(实际上在任何其他语言中)中,您应该将代码组织到一个上下文中,该上下文根据多个模块的功能对其进行分组。 在这种情况下,公共上下文是Bank
。
如前所述,这:
alias Bank.{
Account,
Customer,
Deposit,
Ledger,
Repo,
Transfer,
Entry
}
只是一个捷径:
alias Bank.Account
alias Bank.Customer
alias Bank.Deposit
alias Bank.Ledger
alias Bank.Repo
alias Bank.Transfer
alias Bank.Entry
如果您删除alias
您的模块将不再知道这些别名,并且当您调用Repo.all(from a in Account)
它会尝试在不存在的Account
模块上执行此命令(它应该是Bank.Account
) .
Alias负责为给定模块提供一个替代名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.