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...