gpt4 book ai didi

elixir - 如何为 Elixir 结构验证/强制执行类型和值?

转载 作者:行者123 更新时间:2023-12-04 18:01:13 25 4
gpt4 key购买 nike

Elixir Structs 如何验证/强制执行值的类型和范围?

例如在 Struct 创建过程中,如果传入无效的类型/值,则抛出错误

  • lat 应该是数字,介于 -90.0 和 +90.0 之间
  • lon 应该是数字并且介于 -180.0 和 +180.0 之间

  • defmodule Location do
    @enforce_keys [:lat, :lon]
    defstruct lat: 0, lon: 0
    end

    这里与 @JoséValim 进行了一些讨论,但不清楚结果如何
    https://groups.google.com/forum/#!topic/elixir-lang-core/U_wdxEqWj_Y

    最佳答案

    无论您是在寻找终身保护/类型保证,这是不可能的 .结构是 bare maps underneath :

    defmodule Location do
    @enforce_keys [:lat, :lon]
    defstruct lat: 0, lon: 0
    end

    loc = %Location{lat: 0, lon: 0}
    is_map(loc) #⇒ true

    更重要的是,人们可以简单地创建一个 map__struct__键设置为原子,表示结构名称,瞧:

    loc_str = %{__struct__: Location, lat: 0, lon: 0}
    #⇒ %Location{lat: 0, lon: 0}

    或使用 Kernel.struct/2 ,那 does not check anything :

    struct(Location, [lat: 0, lon: 0])
    #⇒ %Location{lat: 0, lon: 0}

    也就是说,人们不应该对待 struct作为 Elixir 类型层次结构中的一等公民。这是一张带有附加字段的 map __struct__放。

    在 Elixir 中,我们通常使用 Typespecs dialyzer 为此目的进行静态代码分析。

    关于elixir - 如何为 Elixir 结构验证/强制执行类型和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50898468/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com