FAIL bất ngờ với: tồn tại trong raku


8

Trong khi cố gắng gỡ lỗi mã chương trình, tôi đã chạy vào đây:

(base) hsmyers@BigIron:~$ rlwrap -A raku

To exit type 'exit' or '^D'
> my regex N { <[A..G]> };
regex N { <[A..G]> }
> my %h = A => 1, B => 2;
{A => 1, B => 2}
> 'B' ∈ %h.keys
True
> my $m = 'B' ~~ / <N> /;
「B」
 N => 「B」
> $m ∈ %h.keys
False
> $m.Str ∈ %h.keys
True
> my $n = $m.Str
B
> $n ∈ %h.keys
True
> %h<B>:exists
True
> %h<$n>:exists
False
>

Tóm lại, câu hỏi là làm thế nào để bạn đi từ đối tượng khớp đến chuỗi sao cho% anything: tồn tại sẽ hoạt động. 'Yếu tố của các khóa' cung cấp một cách giải quyết, nhưng tôi tin rằng đó không phải là cách chính xác để kiểm tra sự tồn tại của khóa?

Câu trả lời:


6

Bạn đặt các kết quả khớp trong Strngữ cảnh bằng cách sử dụng ~, nhưng tôi nghĩ vấn đề là trường hợp của bạn là bạn đang sử dụng dấu ngoặc kép <>cho một biến. %h<$n>trả về giá trị tương ứng với khóa bằng chữ $ n. Bạn cần sử dụng% h {$ n} để lấy giá trị tương ứng với nội dung của $n. Ngoài ra, nếu $ n chứa một Matchnó sẽ được đặt trong ngữ cảnh Str, do đó, nó sẽ hoạt động.


Có nó trong một! Tôi xin lỗi vì sự thiếu hiểu biết của câu hỏi đã đưa ra câu trả lời :) Tôi chỉ có thể nói rằng tôi đã sao chép từ tài liệu chính thức. Có lẽ nếu tôi đã đọc lại nhiều lần tôi sẽ nhận được nó. Thiếu các ví dụ đầy đủ đã là một vấn đề khó khăn
hsmyer

Không có lời xin lỗi, không cần thiết. Chúng tôi ở đây để giúp đỡ. Và nếu bạn đánh giá cao một số nhận xét khó hiểu trong tài liệu, xin vui lòng nêu ra một vấn đề. Cảm ơn!
jjmerelo

7

<a b c>là một phím tắt cho qw<a b c>.
Mà sẽ kết thúc như'a', 'b', 'c'

Cách để truy cập Hash bằng khóa là với {}

%h{'a', 'b', 'c'}

Cái nào sẽ đẹp hơn khi viết là:

%h{<a b c>}

Điều gì sẽ tốt hơn nữa là thoát khỏi {}

%h<a b c>

Đó là lý do tại sao đó là cú pháp Raku hợp lệ.

Vì vậy, khi bạn viết này:

%h<$n>

Về cơ bản nó giống như:

%h{'$n'}

Nếu bạn chỉ truy cập một yếu tố và nó không có khoảng trắng.
Thay vì làm điều này mọi lúc:

%h{'abc'}

Nó đơn giản hơn nhiều để chỉ sử dụng:

%h<abc>

Đó là lý do tại sao tất cả các tài liệu sử dụng mẫu đó.


Tương tự như vậy cũng giống nhau:

$/{<a b c>}
$/<a b c>
$<a b c>

Vì vậy, nếu bạn thấy $<abc>nó thực sự đang tìm kiếm bên trong $/liên kết giá trị với khóa abc.

Có rất nhiều cú pháp sử dụng lại trong Raku. <>là một trường hợp như vậy


Ghi chú:

Bạn không cần sử dụng .keystrên Hash với .

'B'    %h;   # True

(Vì Raku sử dụng các toán tử khác nhau cho các hoạt động khác nhau, nên hiếm khi bạn phải thực hiện việc xoa bóp dữ liệu đó.)


Câu trả lời của bạn làm rõ tình huống độc đáo cảm ơn!
hsmyer
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.