[elixir元编程]在管道运算符的最后赋值变量

elixir的管道运算符用起来非常爽, 但是也有一点点小瑕疵, 举个我经常遇到的栗子

  #我们有一个英文字典的txt文件, 每行一个中英对照
  #格式是: hello=你好
  #我们想要把这个txt转成一个map
  path          #这是我们要读的文件的路径
  |> File.stream!() #我们把文件按行读出来
  |> Stream.map(&String.trim/1) #然后每一行都trim一下
  |> Stream.filter(&(String.length(&1)>0)) #排除掉空行
  |> Stream.map(&String.split(&1, "=")) #用等号隔开
  |> Stream.map(&(length(&1)==2)) #排除掉格式不对的
  |> Map.new(fn [k, v] -> {k, v} end) #一气呵成的转成map了!
  # 然后我得给这个map起个帅气的名字, 叫做map1
  # 我要把结果赋值给map1, 等等, 我要跑回第一行赋值???

要是能在后面加一行来赋值就好啦, 比如:

|> as(map1)

这样才叫一气呵成啊

首先了解一下管道运算符的运行规则: 其实就是将管道运算符左边的代码插到右边的调用的第一个参数中

不管上面写了多少乱七八糟的东西, 都能当作一个x塞到下一个管道的第一个参数中

那最后一行的调用就变成了 as(x, map1)

我们想将 as(x, map1) 转换成map1 = x, 那转成ast看看


很简单吧

那照着来抄个宏

  defmacro as(value, match) do
    {:=, [], [match, value]}
  end

测试一下, 一发通过

感觉世界又变得美好了一点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值