【问题标题】:How should i define something constantlike in Erlang我应该如何在 Erlang 中定义一些常量
【发布时间】:2012-06-07 08:28:31
【问题描述】:

我有一个模块可以进行一些非约束最小化。我想让它的界面尽可能简单,所以最好的选择是将它简化为一个函数,例如:min_of(F)。

但是一旦它是残酷的计算,我将不得不处理至少两个常数:最小化算法的精度和最大迭代次数,所以如果目标函数根本没有局部最小值,它就不会自行挂起.

无论如何,下一个最佳选择是:min_of( F, Iterations, Eps )。没关系,但我不喜欢它。我还想再定义一个 min_of( F ) 是这样的:

min_of( F ) ->
    min_of( F, 10000, 0.0001).

但没有神奇的数字。

我是 Erlang 的新手,所以我不知道如何正确处理这个问题。我应该定义一个宏、一个变量还是一个返回常量的函数?还是别的什么?我发现 Erlang 的表达能力很强,所以这个问题似乎比技术问题更好。

【问题讨论】:

    标签: erlang magic-numbers


    【解决方案1】:

    你可以像这样定义宏

    -define(ITERATIONS, 10000).
    -define(EPS, 0.0001).
    

    然后将它们用作

    min_of(F, ?ITERATIONS, ?EPS).
    

    【讨论】:

      【解决方案2】:

      您可以使用宏,但也可以使用内联函数。

      -compile({inline, [iterations/0, eps/0]}).
      
      iterations() -> 10000.
      eps() -> 0.0001.
      

      然后以这种方式使用它

      min_of(F) ->
        min_of(F, iterations(), eps()).
      

      好处是你可以使用所有的语法工具而不需要epp。在这种情况下,函数调用也不是性能关键,因此您甚至可以不使用 inline 指令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-02
        • 1970-01-01
        • 2012-07-05
        • 2017-04-28
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多