Hủy cấu trúc danh sách các cặp


8

Xem xét

.say for (1,2,2).rotor(2=>-1).map( -> ($a, $b) { $a - $b })

mà hoạt động như mong đợi. Tuy nhiên,

.say for (1,2,2).pairs.rotor(2=>-1).map( -> ($a, $b) { $a.value - $b.value })

ném

Too few positionals passed to '<anon>'; expected 2 arguments but got 0 in sub-signature

Đây có phải là một lỗi hoặc tôi đang thiếu một cái gì đó?

Đây là phiên bản Rakudo Star 2019.03.1 được xây dựng trên phiên bản MoarVM 2019.03 triển khai Perl 6.d.

Câu trả lời:


5

Nó đang lấy Pairnhư là một Capture, do đó biến Pairthành một đối số có tên:

$ raku -e '(a => 42, b => 666).map: -> |c { dd c }'
\(:a(42))
\(:b(666))

Trong ví dụ của bạn, nó không vượt qua bất kỳ đối số vị trí nào, do đó gây ra lỗi thực thi quan sát được.

jnthn ++ để chỉ ra điều này.


3
Ép buộc với a Capturelà chính xác làm thế nào phá hủy hoạt động.
Jonathan Worthington

0

btw - Tôi đã tự hỏi tại sao | c chứ không phải \ c ... từ tài liệu ...

Bên trong Chữ ký, một Capture có thể được tạo bằng cách thêm tiền tố vào tham số sigilless với thanh dọc |. Điều này gói phần còn lại của danh sách đối số vào tham số đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.