Không thể đặt bản đồ trong bối cảnh chìm


8

Tôi đang cố gắng để xem cách ném bản đồ trong bối cảnh chìm. Trong mã này

class Sunk {
    has $.titanic;
    method sink {
        say "Sinking $!titanic";
    }
}

Sunk.new( :titanic($_) ) for 1..3;

(1..3).map: { Sunk.new( :titanic($_) ) };

Các forvòng lặp một cách hiệu quả chìm tất cả các tạo ra, mapthì không. Bất cứ ý tưởng tại sao?

Thử nghiệm trong nướng này: https://github.com/perl6/roast/blob/b9bfe1844db25f65a4aeb351a0107f83689cb5c2/S04-statements/sink.t#L27-L32 là nghĩa vụ phải làm việc như một thử nghiệm cho điều đó. Và bản đồ có hiệu quả trong bối cảnh chìm, nhưng tôi không thấy nó "chạy như chìm" như thế nào. Nó chỉ đơn giản là chạy.

Câu trả lời:


6

Trong ví dụ của bạn, maptrả về a Seqvới Sunkcác đối tượng trong đó. Toàn bộ Seqbị chìm, gọi một cách hiệu quả Seq.iterator.sink-all, không chìm tất cả các yếu tố của nó: nó chỉ kéo Seqtrống bằng cách gọi pull-onecho đến khi IterationEndđược trả lại.


5

Tôi sẽ không giải thích nhiều khi tôi đi, để lại phần lớn cho đến cuối cùng.

Tôi đang cố gắng để xem cách ném bản đồ trong bối cảnh chìm.

Thêm --> Nillàm giá trị trả về của khối sẽ làm điều đó:

(1..3).map: -> $_ --> Nil { Sunk.new( :titanic($_) ) }

Các forvòng lặp một cách hiệu quả chìm tất cả các tạo ra, mapthì không.

Theo mặc định, các khối chạy với:

  • Tất cả các tuyên bố nhưng cuối cùng trong bối cảnh chìm.

  • Tuyên bố cuối cùng không trong bối cảnh chìm. (Câu lệnh cuối cùng là giá trị trả về của khối nên được cho là không phù hợp để ném nó xuống bồn rửa.)

Mã của bạn đã không thay đổi mặc định này cho mapcuộc gọi của bạn để câu lệnh cuối cùng của khối - câu lệnh duy nhất - không nằm trong ngữ cảnh chìm. (Thêm --> Nilvào chữ ký của khối sẽ đưa câu lệnh cuối cùng trở lại trong bối cảnh chìm.)

Các ngoại lệ cho lược đồ mặc định này liên quan đến một số loại từ khóa câu lệnh. forlà một trong những điều này - nó đặt câu lệnh của nó, hoặc câu lệnh cuối cùng trong khối của nó, trong bối cảnh chìm. (Để hoàn tác điều đó, để câu lệnh cuối cùng không nằm trong ngữ cảnh chìm, bạn có thể viết một cái gì đó như $ = do for ....)

Thử nghiệm này trong rang được cho là hoạt động như một thử nghiệm cho điều đó. Và mapcó hiệu quả trong bối cảnh chìm, nhưng tôi không thấy nó "chạy như chìm". Nó chỉ đơn giản là chạy.

Tôi bối rối bởi vé tương ứng và bài kiểm tra. Vì vậy, xin lỗi, tôi không thể giúp đỡ về điều đó.


Tôi đã làm hàng giờ nghiên cứu để chuẩn bị câu trả lời này. Một số tác phẩm tôi tìm thấy và dựa vào đó để làm theo, cùng với những ghi chú ngắn gọn của tôi.

Nhiều liên kết sau đây đi đến các dòng nhật ký IRC cụ thể. Mục đích của tôi đối với hầu hết những người đó là bạn đọc một ít hộp thoại theo sau mỗi dòng để tối đa hóa những gì bạn nhận được từ nó (ngay cả khi đó là sự nhầm lẫn, bởi vì tôi nghĩ thậm chí điều đó có thể hữu ích, như tôi sẽ giải thích tiếp theo).

Vui lòng xem xét việc đọc ít nhất các bản tóm tắt dưới đây và nhấp vào một số liên kết, sau đó đăng bình luận dưới câu trả lời này để kích thích thảo luận thêm ở đây để xem liệu chúng ta có thể tiến tới sự rõ ràng hay không.


Cảm ơn rất nhiều về câu trả lời, nhưng trong ví dụ của bạn, mọi yếu tố được bản đồ trả về sẽ bị ném trong bối cảnh chìm, chứ không phải bản đồ. Tôi nghĩ rằng câu trả lời của @ elizabeth-mattijsen đã đóng đinh nó.
jjmerelo
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.