Erlang 多态性:同一个合约的多个实现?

use*_*252 6 polymorphism erlang

什么是正确的 Erlang 方式将实现与合约分离以及如何在它们之间切换?

I G*_*ERS 4

虽然其他人提到了行为功能,但它只是一个小帮助器,可确保您实现模块中回调结构的所有功能。如果您有两个实现a和,并且两者都实现相同的功能,则您可以在调用模块中b静态替换ab对于有更好实现的静态配置,这是更好的选择。

如果问题更具动态性,您可以这样做

 Mod = a,
 Mod:f(Args).
Run Code Online (Sandbox Code Playgroud)

然后在代码中Mod适当设置。这使您可以在程序运行时动态控制要调用的模块。目前尚不完全清楚您想要两者中的哪一个。

  • 假设“Mod”作为函数的参数给出。现在调用“Mod:f(Args)”的代码是动态的,因为我们可以改变参数以获得不同的程序行为。通常,您将“Mod”放入“#state{implementation = Mod,...}”记录中,然后使用它来获取动态调用。请注意:您无法在代码库中使用“grep(1)”,并且透析器更难找出调用结构。这些是您为这样的解决方案做出的牺牲。 (3认同)