Làm cách nào để tắt tùy chọn `show_tied` của mô-đun Perl 5 khi sử dụng nó trong Raku?


8

Tôi đã sử dụng mô-đun CPAN Perl Dữ liệu :: Máy in (DP) với Perl. Nó hoạt động rất tốt.

Bây giờ tôi muốn sử dụng nó trong mã Raku.

Khi tôi sử dụng :from<Perl5>tính năng này để nhập nó và sau đó chạy mã bằng cách sử dụng nó, chú thích (tied to Perl6::Hash)sẽ được thêm vào màn hình băm. 1

Như tài liệu CPAN của DP cho thấy, chú thích này được điều khiển bởi tùy chọn show_tied. Tôi muốn chuyển nó tắt (đặt nó 0) thay vì mặc định của nó trên (các thiết lập để 1). Đây là cách tôi làm điều đó trong Perl:

use Data::Printer show_tied => 0;

Nhưng khi tôi thử điều này trong Raku:

use Data::Printer:from<Perl5> show_tied => 0;

Tôi có:

Lỗi trong khi nhập từ 'Dữ liệu :: Máy in': không có thẻ như vậy 'show_tied'

Làm cách nào để show_tiedtắt khi sử dụng DP trong Raku?

Chú thích

1 Có lẽ điều này là do Inline :: Perl5 (thực hiện :from<Perl5>tính năng này) đang làm một cái gì đó để cho phép Perl / Raku mượt mà.

Câu trả lời:


6

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 }.


3 giải pháp này không hoạt động với ví dụ thử nghiệm mà tôi đã đưa ra stackoverflow.com/questions/55799219/. Nó vẫn hiển thị đầu ra không chính xác với tất cả các 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 :, (
con

Xin chào @con. 1 Nó hoạt động với tôi. Xem bản sao tập lệnh thử nghiệm của tôi, chi tiết về hệ thống tôi chạy trên đó và đầu ra mà nó tạo ra . 2 Khi tôi chạy các biến thể của tập lệnh thử nghiệm của bạn theo hướng dẫn trong SO này, chúng cũng hoạt động như bình thường, bật / tắt tùy chọn DP như mong đợi. 3 Những kết quả này về cơ bản là giống nhau đối với tôi, HåkonHægland và Stefan (tác giả của IP5). 4 Tôi nghĩ Dữ liệu :: Máy in hoạt động trong Raku và SO này là chính xác. 5 Nếu bạn muốn thảo luận thêm về vấn đề của mình, vui lòng nhận xét về câu trả lời của tôi về SO trước đó của bạn. TIA.
raiph
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.