2015-02-23 46 views
13

Tôi đang đọc qua một số mã elixir mã trên github và tôi thấy |> đang được sử dụng thường xuyên. Nó không xuất hiện trong danh sách operation trên trang tài liệu. Nó có nghĩa là gì?"|>" có nghĩa là gì trong elixir?

ví dụ:

expires_at: std["expires_in"] |> expires_at, 
+1

Trong IEx bạn có thể sử dụng 'h |>/2' để xem tài liệu của nó. Nó hoạt động với bất kỳ toán tử nhị phân 'h ++/2',' h +/2', toán tử đơn nhất 'h -/1' hoặc các hàm thông thường' h is_atom'. –

Trả lời

14

Đây là pipe operator. Từ các tài liệu được liên kết:

Toán tử này giới thiệu biểu thức ở phía bên trái làm đối số đầu tiên cho cuộc gọi hàm ở phía bên tay phải.

Ví dụ

IEX>[1, [2], 3] |> List.flatten()

[1, 2, 3]

Ví dụ trên cũng giống như gọi List.flatten([1, [2], 3]).

2

Ngoài phản ứng tuyệt vời của Stefan, bạn có thể muốn đọc phần gọi là "đường ống điều hành" của blog posting này cho một sự hiểu biết tốt hơn về các trường hợp sử dụng mà các nhà điều hành đường ống được thiết kế để giải quyết trong Elixir. Ý tưởng quan trọng là:

Nhà điều hành đường ống có thể kết hợp các hoạt động khác nhau mà không sử dụng biến trung gian. . .Mã có thể dễ dàng là , sau đó đọc mã từ trên xuống dưới. Chúng tôi vượt qua tiểu bang thông qua các biến đổi khác nhau để có được kết quả mong muốn, mỗi chuyển đổi trả lại một số phiên bản đã sửa đổi của tiểu bang.

11

nó mang lại cho bạn khả năng để tránh mã xấu như thế này:

orders = Order.get_orders(current_user) 
transactions = Transaction.make_transactions(orders) 
payments = Payment.make_payments(transaction, true) 

cùng mã sử dụng đường ống dẫn điều hành:

current_user 
|> Order.get_orders 
|> Transaction.make_transactions 
|> Payment.make_payments(true) 

nhìn vào chức năng Payment.make_payments, có tham số bool thứ hai, nếu đó là thông số đầu tiên như sau:

def make_payments(bool_parameter, transactions) do 
    //function 
end 

nó sẽ không hoạt động nữa.

khi phát triển ứng dụng elixir, hãy nhớ rằng các thông số quan trọng phải ở vị trí đầu tiên, trong tương lai nó sẽ cho bạn khả năng sử dụng toán tử đường ống.

Tôi ghét câu hỏi này khi viết mã phi elixir: tôi nên đặt tên biến này là gì? Tôi lãng phí rất nhiều thời gian cho câu trả lời.