aka*_*nuk 11 erlang magic-numbers
我有一个模块,它做了一些非约束最小化.我想保持其界面尽可能简单,因此最好的选择是将其缩小为单个函数,例如:min_of(F).
但是一旦它是残酷的计算,我将不得不处理至少两个常数:最小化算法的精度和最大迭代次数,因此如果目标函数根本没有局部最小值,它就不会自行挂起.
无论如何,下一个最佳选择是:min_of(F,Iterations,Eps).没关系,但我不喜欢它.我还想让另一个min_of(F)定义如下:
min_of( F ) ->
min_of( F, 10000, 0.0001).
Run Code Online (Sandbox Code Playgroud)
但没有魔术数字.
我是Erlang的新手,所以我不知道如何妥善处理这个问题.我应该定义一个宏,一个变量,还是一个返回常量的函数?甚至还有其他什么?我发现Erlang很有表现力,所以这个问题似乎比技术问题更好.
spi*_*igo 22
您可以像这样定义宏
-define(ITERATIONS, 10000).
-define(EPS, 0.0001).
Run Code Online (Sandbox Code Playgroud)
然后将它们用作
min_of(F, ?ITERATIONS, ?EPS).
Run Code Online (Sandbox Code Playgroud)
您可以使用宏,但也可以使用内联函数.
-compile({inline, [iterations/0, eps/0]}).
iterations() -> 10000.
eps() -> 0.0001.
Run Code Online (Sandbox Code Playgroud)
然后在途中使用它
min_of(F) ->
min_of(F, iterations(), eps()).
Run Code Online (Sandbox Code Playgroud)
好处是您可以使用所有语法工具而无需使用epp
.在这种情况下,调用函数也不是性能关键所以你甚至可以不使用inline
指令.
归档时间: |
|
查看次数: |
3500 次 |
最近记录: |