Pau*_*her 4 variables erlang for-loop user-defined-functions
我想在Erlang中创建16个目录.for(create_dir("work/p"++ A,其中A是列表[0,1,... f]中的元素)(十六位数表示十六进制表示法).
我当然可以写十六行,如:mkdir("work/p0"),mkdir("work/p1")等.
我查看过列表:foreach.在示例中使用fun,是否可以在循环外定义一个函数并调用它?
我是Erlang的新手,习惯了C++等.
是的,可以在调用之外定义(命名)函数lists:foreach/2.你为什么要这样?这是匿名函数非常方便的情况:
lists:foreach(fun(N) ->
file:make_dir(
filename:join("work", "p"++integer_to_list(N, 16)))
end, lists:seq(0, 15)).
Run Code Online (Sandbox Code Playgroud)
该filename:join/2调用将使用适当的目录分隔符来构造字符串work/pN,其中N是使用的十六进制表示形式integer_to_list/2的整数,它将整数转换为给定基数(16)中的字符串(列表).
lists:seq/2是一个友好的小函数,返回[A,A+1,A+2,...,B-1,B]给定的列表A和B.
请注意,你也可以在这里使用列表推导语法,但由于我们将函数应用于单独的副作用列表,我选择坚持使用foreach.
如果你真的想要定义一个单独的函数 - 让我们调用它foo并假设它需要42个参数 - 你可以fun foo/42在代码中引用它.此表达式求值为一个函数对象,就像内联定义的匿名函数一样,可以传递给它lists:foreach/2.