elixir元程式設計 在管道運算子的最後賦值變數

2021-08-19 16:29:19 字數 931 閱讀 7713

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] -> end) #一氣呵成的轉成map了!

# 然後我得給這個map起個帥氣的名字, 叫做map1

# 我要把結果賦值給map1, 等等, 我要跑回第一行賦值???

要是能在後面加一行來賦值就好啦, 比如:

|> as(map1)

這樣才叫一氣呵成啊

首先了解一下管道運算子的執行規則: 其實就是將管道運算子左邊的**插到右邊的呼叫的第乙個引數中

不管上面寫了多少亂七八糟的東西, 都能當作乙個x塞到下乙個管道的第乙個引數中

那最後一行的呼叫就變成了 as(x, map1)

我們想將 as(x, map1) 轉換成map1 = x, 那轉成ast看看

很簡單吧

那照著來抄個巨集

defmacro as(value, match) do

end

測試一下, 一發通過

感覺世界又變得美好了一點

LInux 管道 Let 運算子

1 左邊的輸出為右邊的輸入 2 左邊和右邊都開啟子bash不會改變原值 root linux1 sh a 10 root linux1 sh a 22 echo ok ok root linux1 sh echo a 10管道符下子bash 會繼承父 bash 的變數管道符情況下,子bash會繼承父...

移位運算子 三元運算子

移位運算子 左移 規律 乙個運算元進行左移運算的時候,結果就是等於運算元乘以2的n次方,n就是左移 的位數.3 1 3 2 1 6 3 2 3 2 2 12 3 3 3 2 3 24 右移 規律 乙個運算元在做右移運算的時候,實際上就是等於該運算元除以2的n次方,n就是右移的位數。3 1 3 2 1...

位運算子與三元運算子

1 按位與運算子 int m 6,b,c 4,d,t b m c 按位與,兩個操作位數中位都為1,結果才為1,否則結果為0。轉換為二進位制 m 6,0110 c 4,0100 結果為 0100 b 4 system.out.println b 2 按位或運算子 int m 6,b,c 4,d d m...