繁体   English   中英

Elixir 中的这个别名有什么作用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM