我想在 Erlang 中创建 16 个目录。for ( create_dir("work/p" ++ A, 其中 A 是列表 [0, 1, ... f]) 中的一个元素(十六进制表示法中的十六个数字)。
我当然可以写 16 行,例如:mkdir ("work/p0")、mkdir("work/p1") 等。
我看过列表:foreach。在使用 fun 的示例中,是否可以在循环外定义一个函数并调用它?
我是 Erlang 的新手,习惯于 C++ 等。
我想在 Erlang 中创建 16 个目录。for ( create_dir("work/p" ++ A, 其中 A 是列表 [0, 1, ... f]) 中的一个元素(十六进制表示法中的十六个数字)。
我当然可以写 16 行,例如: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)).
该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
.