当前位置:  开发笔记 > 编程语言 > 正文

强制执行结构中的所有键

如何解决《强制执行结构中的所有键》经验,为你挑选了1个好方法。

如何在不需要复制所有键的情况下强制执行结构中的所有键?为了澄清,我想干这个:

defmodule Ticket do
  @enforce_keys [:origin, :destination, :price]
  defstruct [:origin, :destination, :price]
end

我可以使用其他变量:

defmodule Ticket do
  struct_keys = [:origin, :destination, :price]
  @enforce_keys struct_keys
  defstruct struct_keys
end

它工作正常,但看起来很吵.有没有更好的方法?



1> Dogbert..:

你可以传递@enforce_keys,defstruct因为@enforce_keys它只是一个普通的模块属性:

defmodule Ticket do
  @enforce_keys [:origin, :destination, :price]
  defstruct @enforce_keys
end
iex(1)> defmodule Ticket do
...(1)>   @enforce_keys [:origin, :destination, :price]
...(1)>   defstruct @enforce_keys
...(1)> end
iex(2)> %Ticket{}
** (ArgumentError) the following keys must also be given when building struct Ticket: [:origin, :destination, :price]
    expanding struct: Ticket.__struct__/1
    iex:2: (file)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有