如何以更惯用的方式修改多层哈希深层的modified字段
优化多层哈希修改的惯用写法
针对你这种三层嵌套哈希(%sources{$lang}{$filename}{$attribute})修改所有底层modified字段的需求,可以利用Raku的**feed运算符(==>)**结合链式调用,把多层循环简化成更简洁的表达式,同时保持可读性:
优化后的代码
%sources.values ==> map { .values } ==> map { .grep({ .key eq 'modified' }) } ==> map { .value = transform-modified(.value) };
或者更紧凑的无feed运算符写法:
%sources.values.map(*.values).map(*.grep(*.key eq 'modified')).map({ .value = transform-modified(.value) });
代码说明
%sources.values:取出第一层哈希(按语言分组)的所有值,即各语言对应的文件哈希集合map { .values }(或简写map(*.values)):提取每个文件哈希的所有值,也就是单个文件对应的属性哈希集合map { .grep({ .key eq 'modified' }) }(或简写map(*.grep(*.key eq 'modified'))):筛选出每个属性哈希中键为modified的键值对- 最后一个
map:对筛选出的目标键值对,调用transform-modified函数更新其值
如果是不确定层级的嵌套哈希,还可以用深度遍历的方式,但针对固定三层的结构,上面的写法已经足够简洁高效。
内容的提问来源于stack exchange,提问作者Richard Hainsworth
相关产品推荐
相关产品推荐

