Tại sao không có mỗi phương thức của người Viking trên chuỗi Perl6?


14

Đôi khi, tôi sẽ bắt đầu viết một chuỗi các cuộc gọi phương thức tại Perl 6 REPL, như:

".".IO.dir.grep(...).map(...).

... Và sau đó tôi nhận ra rằng những gì tôi muốn làm với danh sách cuối cùng là in mọi phần tử trên dòng riêng của nó. Tôi hy vọng các chuỗi có một cái gì đó giống như một eachphương thức để tôi có thể kết thúc chuỗi .each(*.say), nhưng không có phương pháp nào mà tôi có thể tìm thấy. Thay vào đó tôi phải quay lại đầu dòng và trả trước .say for. Cảm giác như nó phá vỡ dòng suy nghĩ của tôi.

Đó là một phiền toái nhỏ, nhưng nó gây cho tôi một thiếu sót to lớn đến nỗi tôi tự hỏi liệu tôi có đang thiếu một sự thay thế dễ dàng nào không. Những cái duy nhất tôi có thể nghĩ là ».say.join("\n").say, nhưng cái trước có thể hoạt động trên các phần tử không theo thứ tự (nếu tôi hiểu chính xác) và cái sau xây dựng một chuỗi có thể có vấn đề lớn, tùy thuộc vào danh sách đầu vào.

Câu trả lời:


8

Như bạn đã viết trong bình luận, chỉ một người khác .map(*.say)cũng tạo ra một dòng có giá trị True khi sử dụng REPL. Bạn có thể thử gọi .sinkphương thức sau câu lệnh bản đồ cuối cùng.

".".IO.dir.grep({$_.contains('e')}).map(*.uc).map(*.say).sink

Tôi cho rằng ... nhưng sau đó REPL sẽ đưa ra một danh sách các Truegiá trị có cùng độ dài với danh sách đầu vào. Không lý tưởng.
Sean

".".IO.dir.grep(*.contains("e")).map(*.uc).map: {.say; Empty}sẽ làm tương tự, nhưng chỉ đề cập đến một danh sách trống trong REPL
Elizabeth Mattijsen

Tôi tin rằng REPL có nghĩa là không xuất kết quả của một dòng nếu đã có đầu ra; Nó thực hiện điều đó bằng cách gọi tellra filehandle trước và sau lệnh và so sánh chúng, tôi nghĩ sao? vì vậy một cái gì đó có thể đi sai với logic đó.
timotimo

11

Bạn có thể cuộn của riêng bạn.

use MONKEY;

augment class Any 
{ 
    method each( &block )
    {
        for self -> $value { 
            &block( $value );
        }
    }
};

List.^compose;
Seq.^compose;

(1, 2).each({ .say });
(2, 3).map(* + 1).each({ .say });

# 1
# 2
# 3
# 4

Nếu bạn thích điều này, có cơ hội mô-đun CPAN đầu tiên của bạn ngay tại đó.


1
Câu trả lời tuyệt vời và ý tưởng cho một mô-đun CPAN. Bạn có thể xem xét tinh thần, nó có thể được tạo thành một phụ thông thường và được gọi với .&each(), trong trường hợp họ không muốn làm phiền với việc tăng cường.
user0721090601

Sử dụng .&each()định dạng đi kèm với nhược điểm, chẳng hạn như được yêu cầu phải bám vào một dòng duy nhất (hoặc sử dụng khá khó sử dụng ở \ mọi nơi).
Tyil
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.