- Context.
- Dấu ngoặc đơn không có vai trò bạn nghĩ rằng họ có trong việc tạo danh sách.
Ví dụ:
$x = 1 + 1; # $x is 2.
$x = (1 + 1); # $x is 2.
@x = 1 + 1; # @x is (2).
@x = (1 + 1); # @x is (2).
$x = (1 + 1, 1 + 2); # $x is 3.
@x = (1 + 1, 1 + 2); # @x is (2, 3).
Nói đại khái, trong danh sách bối cảnh các nhà điều hành dấu phẩy tách hạng mục của một danh sách; trong ngữ cảnh vô hướng, toán tử dấu phẩy là dấu phẩy nối tiếp C, đánh giá các cạnh trái và phải của nó, và trả về giá trị của cạnh phải. Trong ngữ cảnh vô hướng, dấu ngoặc đơn biểu thức nhóm để ghi đè thứ tự các hoạt động, và trong ngữ cảnh danh sách, dấu ngoặc đơn làm ... chính xác điều tương tự, thực sự.Lý do chúng thích hợp trong giao để mảng là thế này:
# Comma has precedence below assignment.
# @a is assigned (1), 2 and 3 are discarded.
@a = 1, 2, 3;
# @a is (1, 2, 3).
@a = (1, 2, 3);
Đối với câu hỏi của bạn "nó là một đại lượng vô hướng hoặc một danh sách một phần tử", nó chỉ là không phải là một câu hỏi có ý nghĩa để hỏi của một biểu thức trong sự cô lập , vì bối cảnh. Trong ngữ cảnh danh sách, mọi thứ đều là danh sách; trong ngữ cảnh vô hướng, không có gì.
Đề nghị đọc: perlop, perldata, Lập trình Perl.
Tôi cho rằng tôi gần như lo lắng về việc vô tình gán danh sách một phần tử có chứa kết quả thay vì kết quả cho chính nó thành vô hướng. Nhưng nếu tôi đọc các câu trả lời chính xác, điều này thực sự là không thể, trừ khi tôi làm một cái gì đó như '$ x = @ {[1 + 1]};'. Dường như việc gán một danh sách cho một vô hướng khác với việc gán một mảng cho một vô hướng. Điều gì sẽ xảy ra nếu bạn gán một danh sách có chứa một mảng vào một vô hướng? '$ x = (@list);' –
Trong một nhiệm vụ, phía bên trái xác định bối cảnh trong đó phía bên phải sẽ được đánh giá. Vì vậy, khi bạn gán một mảng cho một biến vô hướng, mảng được đánh giá trong ngữ cảnh vô hướng. Một mảng được đánh giá trong ngữ cảnh vô hướng trả về số lượng các mục trong mảng. Cả hai ví dụ trong nhận xét của bạn đều thuộc danh mục đó. Cũng lưu ý rằng ở đây chúng ta đang nói về việc đánh giá một mảng trong ngữ cảnh vô hướng. Chúng ta không nói về một danh sách trong ngữ cảnh vô hướng, bởi vì không có danh sách trong ngữ cảnh vô hướng. – FMc
Tôi đoán tôi đã luôn luôn nghĩ về danh sách và mảng về cơ bản là tương đương và có thể hoán đổi cho nhau, nhưng chúng không. –