Sự khác biệt giữa my ($variableName)
và my $variableName
trong Perl là gì? Những gì để các dấu ngoặc đơn làm gì?
Trả lời
Hiệu quả quan trọng là khi bạn khởi tạo biến cùng một lúc mà bạn khai báo nó:
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
Thời gian khác, điều quan trọng là là khi bạn khai báo nhiều biến.
my ($a,$b,$c); # correct, all variables are lexically scoped now
my $a,$b,$c; # $a is now lexically scoped, but $b and $c are not
Báo cáo cuối cùng sẽ cho bạn lỗi nếu bạn use strict
.
Về bản chất: các dấu ngoặc 1. cung cấp ngữ cảnh danh sách và 2. phân phối toán tử hoặc hàm trên nhiều giá trị. – Ether
# 2 về mặt kỹ thuật là không chính xác và có khả năng gây nhầm lẫn. Nó là không chính xác trong đó cách khai báo với parens hoạt động là bằng cách xác định một danh sách từ vựng chứ không phải là một scalar từ vựng. Nó là gây hiểu lầm trong đó một người mới bắt đầu có thể đọc "các dấu ngoặc ... phân phối toán tử hoặc hàm trên nhiều giá trị" và mong đợi '($ x, $ y) = (1, 2) + 3' để gán giá trị 4 cho' $ x' và 5 đến '$ y' bằng cách" phân phối toán tử + trên nhiều giá trị ". (Trong thực tế, câu lệnh đó gán 5 cho '$ x' và không có gì là' $ y'.) –
# 1 cũng không hoàn toàn chính xác. Các parens ở phía bên trái của một nhiệm vụ cung cấp ngữ cảnh danh sách, nhưng điều đó không có nghĩa là chúng cung cấp ngữ cảnh danh sách ở mọi nơi khác. –
Vui lòng xem perdoc perlsub để biết thêm thông tin về nhà điều hành my
. Dưới đây là một trích đoạn nhỏ:
Tóm tắt:
my $foo; # declare $foo lexically local
my (@wid, %get); # declare list of variables local
my $foo = "flurp"; # declare $foo lexical, and init it
my @oof = @bar; # declare @oof lexical, and init it
my $x : Foo = $y; # similar, with an attribute applied
Như câu trả lời và ý kiến giải thích khác sử dụng dấu ngoặc cung cấp danh sách bối cảnh vào biến. Dưới đây là đoạn mã cung cấp một số giải thích thêm bằng cách sử dụng chức năng perl split
.
use strict;
my $input = "one:two:three:four";
# split called in list context
my ($out) = split(/:/,$input);
# $out contains string 'one'
#(zeroth element of the list created by split operation)
print $out,"\n";
# split called in scalar context
my $new_out = split(/:/,$input);
# $new_out contains 4 (number of fields found)
print $new_out,"\n";
Câu trả lời ngắn gọn là ngoặc đơn ngữ cảnh lực khi được sử dụng ở bên trái của =
.
Mỗi câu trả lời khác chỉ ra một trường hợp cụ thể, điều này tạo nên sự khác biệt. Thực sự, bạn nên đọc qua perlfunc để có ý tưởng tốt hơn về cách các hàm hoạt động khác nhau khi được gọi trong ngữ cảnh danh sách như trái ngược với ngữ cảnh vô hướng.
- 1. Sự khác nhau giữa "||" là gì và "hoặc" trong Perl?
- 2. Sự khác nhau giữa 'eq' và '= ~' trong Perl là gì?
- 3. Sự khác nhau giữa Vanilla Perl và Strawberry Perl là gì?
- 4. $ ($ variableName) có nghĩa là gì trong các chuỗi có thể mở rộng trong PowerShell?
- 5. Sự khác nhau giữa BAREWORD và * BAREWORD trong Perl là gì?
- 6. Tại sao sử dụng var {VariableName} = require ('') trong javascript?
- 7. Sự khác nhau giữa một đối tượng và một lớp trong Perl là gì?
- 8. Sự khác nhau giữa `base base` và @ISA trong Perl là gì?
- 9. Trong Perl, sự khác nhau giữa s/^ \ s + // và s/\ s + $ // là gì?
- 10. Sự khác nhau giữa 'for' và 'foreach' trong Perl là gì?
- 11. Sự khác nhau giữa dấu nháy đơn và dấu ngoặc kép trong Perl là gì?
- 12. Sự khác nhau giữa // và /// trong Visual Studio là gì?
- 13. Sự khác nhau giữa == và = trong Prolog là gì?
- 14. Sự khác nhau giữa 'và #' trong Lisp là gì?
- 15. Trong Python, sự khác nhau giữa ".append()" và "+ = []" là gì?
- 16. Sự khác nhau giữa: = và + = trong tạo tệp là gì?
- 17. Sự khác nhau giữa * và. * Trong MATLAB là gì?
- 18. Sự khác nhau giữa $ @ và $ * trong UNIX là gì?
- 19. Sự khác nhau giữa: = và = trong MySQL là gì?
- 20. Sự khác nhau giữa & chức năng và function() trong perl
- 21. Sự khác biệt giữa $ @ và $! trong perl
- 22. Sự khác nhau giữa Perl, Python, AWK và sed là gì?
- 23. Sự khác nhau giữa khả năng perl và java regex là gì?
- 24. Sự khác nhau giữa fancyLocalization và preferredLanguage là gì?
- 25. Sự khác nhau giữa FUTEX_WAIT và FUTEX_WAIT_PRIVATE là gì?
- 26. Sự khác nhau giữa Danh sách và ArrayList là gì?
- 27. Sự khác nhau giữa isSaleable() và isAvailable() là gì?
- 28. Sự khác nhau giữa dataview và datatable là gì?
- 29. Sự khác nhau giữa "bool" và "bool" là gì?
- 30. Sự khác nhau giữa PropertyChangeListener và VetoableChangeListener là gì?
Thú vị Perl Monks trả lời [ở đây] (http://www.perlmonks.org/?node_id=693666) mà cuối cùng đun sôi việc sử dụng các parens trong tuyên bố nhiệm vụ như là một kết thúc chạy xung quanh hoạt động vô ích ưu tiên. – ruffin
Câu trả lời đầy đủ, chi tiết ở đây: [Hướng dẫn nhỏ: Trình điều khiển gán danh sách vô hướng và danh sách] (http://www.perlmonks.org/?node_id=790129). – ikegami