2015-07-04 7 views
6

अनुसार Elixir Tutorial on Enumerables and Streams रहे हैं:पाइप ऑपरेटर व्यवहार

|> प्रतीक पाइप ऑपरेटर है: यह अपने बाईं ओर अभिव्यक्ति से उत्पादन लेता है और अपने अधिकार पर समारोह कॉल करने के लिए इनपुट के रूप में यह गुजरता पक्ष।

एनम मॉड्यूल में सभी फ़ंक्शन उत्सुक हैं।

तो निम्नलिखित बयानों में क्या अंतर है? अंतिम व्यक्ति एक अलग परिणाम क्यों देता है? एक पाइप ऑपरेटर से पहले तरीकों के लिए

iex(1)> 1..1_000 |> Enum.reverse |> Enum.take 5 
[1000, 999, 998, 997, 996] 

iex(2)> (Enum.reverse 1..1_000) |> Enum.take 5 
[1000, 999, 998, 997, 996] 

iex(3)> Enum.reverse 1..1_0000 |> Enum.take 5 
[5, 4, 3, 2, 1] 

उत्तर

6

तर्क कोष्ठक में होना चाहिए।

1..1_000 |> Enum.reverse |> Enum.take 5 
#=> [1000, 999, 998, 997, 996] 

(Enum.reverse 1..1_000) |> Enum.take 5 
#=> [1000, 999, 998, 997, 996] 

Enum.reverse(1..1_000) |> Enum.take 5 
#=> [1000, 999, 998, 997, 996] 

सिवाय इस एक:

Enum.reverse 1..1_0000 |> Enum.take 5 
#=> [5, 4, 3, 2, 1] 

यहाँ, अमृत पहले 1..1_0000 और साथ Enum.take/2 विधि की गणना करता है

ये सब बराबर हैं तर्क के रूप में और फिर परिणाम पर Enum.reverse/1 पर कॉल करें।

# It is actually equal to this: 
Enum.reverse(1..1_0000 |> Enum.take 5) 

# or this if you simplify it: 
Enum.reverse(Enum.take(1..1_0000, 5) 
+2

हां, मैं ऑपरेटर की प्राथमिकता के बारे में भूल गया http://elixir-lang.org/docs/stable/elixir/Kernel.html#|%3E/2 – lad2025

संबंधित मुद्दे