我再次需要你的帮助,我正在尝试理解这段 erlang 代码。
Line="This is cool".
Lines = [Line || _Count <- lists:seq(1,5)].
输出是
["This is cool","This is cool","This is cool","This is cool","This is cool"]
我不明白打印所需次数背后的逻辑。是什么Line || _*****
意思?
我再次需要你的帮助,我正在尝试理解这段 erlang 代码。
Line="This is cool".
Lines = [Line || _Count <- lists:seq(1,5)].
输出是
["This is cool","This is cool","This is cool","This is cool","This is cool"]
我不明白打印所需次数背后的逻辑。是什么Line || _*****
意思?
看这段代码:
Line = "This is cool".
Lines = [{Line, Count} || Count <- lists:seq(1, 5)].
在这里,您创建一个大小为 2 的元组列表,其中第一个元素是常量,第二个元素取自列表理解的源列表。如果你从元组中删除一个元素,它不会改变列表的结构。
由于Line
列表推导右侧的值没有改变,因此每个元素的值都是相同的,即 的值Line
。
列表理解的右侧只是确定元素的数量。
可以这样读:NewListe = [Dosomething || 元素 <- 列表]
以这种方式创建一个 NewListe:对于 Liste 的每个元素,使用 Dosomething 构建一个新元素。
逐步给出 Liste = lists:seq(1,5) = [1,2,3,4,5];
对于每个元素,只需丢弃元素的值(这就是它被写为 _Count 的原因)和
Dosomething 只是发回“这很酷”的值,
结果是 5 次“这很酷”的列表
["这很酷","这很酷","这很酷","这很酷","这很酷"]
<- 称为生成器;标志后|| 您可能有生成器或过滤器。例如,如果我们假设您有一个不同元素的列表,并且只想获取可打印的列表项,将其转换为大写,您将需要一个生成器:
X <- ["toto",5,"Hello",atom]获取每个元素
过滤器:
io_lib:printable_list(X)仅选择可打印列表
和一个转变:
string:to_upper(X)转为大写
总之,你有什么期望:
1> [string:to_upper(X) || X <- ["toto",5,"Hello",atom], io_lib:printable_list(X)].
["TOTO","HELLO"]
2>