Ruby的Unix命令流水线Object#tap
有惯用的类比吗?
用例:在管道中,我想执行一个命令来实现其副作用,但隐式返回输入,以免破坏管道的链接。例如:
echo { 1, 2, 3 } |
tr ' ' 'n' |
sort |
tap 'xargs echo' | # arbitrary code, but implicitly return the input
uniq
我来自Ruby,我会这样做:
[ 1, 2, 3 ].
sort.
tap { |x| puts x }.
uniq
tee
命令与此类似;它将其输入写入标准输出以及一个或多个文件。我相信,如果该文件是进程替换,你会得到同样的效果。
echo 1 2 3 | tr ' ' 'n' | sort | tee >( **code** ) | uniq
进程替换中的代码将从其标准输入中读取,这应该与调用uniq
最终看到的内容相同。