Làm cách nào để show_tiedtắt khi sử dụng DP trong Raku?
Bạn phải chuyển đổi rõ ràng Associatives (ví dụ: Pairs) được liệt kê ở cuối usecâu lệnh, không phải là "thẻ", thành một danh sách dẹt xen kẽ các khóa và giá trị. 1
Giải pháp trực tiếp nhất là tự viết một danh sách bằng phẳng các chữ, ví dụ:
use Data::Printer:from<Perl5> 'show_tied', 0;
Để biết giải pháp gọn gàng hơn, hãy xem phần Sử dụngkv bên dưới.
Tiêm biến
Lưu ý rằng các usebáo cáo được đánh giá tại thời gian biên dịch . Vì vậy, nếu bạn muốn thêm các biến trong danh sách thì bạn cần đảm bảo rằng các giá trị của chúng, không chỉ tên của chúng, cũng được thiết lập tại thời điểm biên dịch , trước khi usecâu lệnh được ước tính. Một người không được trang bị my $foo = 0;sẽ không đủ vì = 0phần này sẽ xảy ra vào thời gian chạy . Thay vào đó, bạn sẽ cần sử dụng cấu trúc thời gian biên dịch phù hợp, chẳng hạn như BEGIN:
BEGIN my $foo = 0;
use Data::Printer:from<Perl5> 'show_tied', $foo;
Sử dụng kv
Các kvthói quen có thể tạo ra mong muốn 'key1', value1, 'key2', value2, ...chuỗi cung cấp một băm:
use Data::Printer:from<Perl5> kv { show_tied => 0 }
hoặc là:
BEGIN my %opts = show_tied => 0;
use Data::Printer:from<Perl5> kv %opts;
Chú thích
1 Câu trả lời này được xây dựng dựa trên lời giải thích của Stefan về vấn đề tôi đã mở để đáp lại "Thay đổi tham số trong Dữ liệu :: Máy in trong Raku" SO :
Giải pháp khá đơn giản: sử dụng Data::Printer:from<Perl5> 'show_tied', 0;Dấu phẩy chất béo =>là một Paircông cụ xây dựng trong Raku trong khi nó thực sự chỉ là một dấu phẩy lạ mắt trong Perl 5. Raku xem xét các Pairđối số được sử dụng để nhập các thẻ như :ALL(tương đương với ALL => True). Để giải quyết vấn đề này và vượt qua những gì mã Perl 5 mong đợi, chỉ cần liệt kê các giá trị riêng lẻ.
Nói cách khác, nhu cầu chuyển đổi này là do Perl và Raku chia sẻ khái niệm về thẻ ( Perl doc về "tags" ; Raku doc về "tags" ) và (không phải ngẫu nhiên) sử dụng cùng một cú pháp để chọn thẻ ( :tagname).
Hơn nữa, khi sử dụng Raku, vấn đề này (cần giải quyết) sự mơ hồ giữa việc liệu cú pháp có được sử dụng để chỉ định thẻ hay không áp dụng cho tất cả các Associative s được sử dụng ở cấp cao nhất của usecâu lệnh, không chỉ những câu được viết trong biểu mẫu :foomà ngay cả những câu được viết dưới các hình thức khác như foo => bar, { foo => bar}, %baz, hoặc { %baz }.
varbiến khủng khiếp . Nó không giống như gói này thậm chí hoạt động trong Raku. Thật là xấu hổ, ở Perl, nó hoạt động tuyệt vời :, (