2015-02-06 25 views
5

Tôi có một câu hỏi chung trong Perl.What là ý nghĩa của dòng dưới đâyÝ nghĩa của các phím dòng này (% S) = @ C_fields ;?

keys(%S)[email protected]_fields; 
+0

dòng có vẻ là một rác. bạn đang trích xuất các giá trị trên cả LHS và RHS mà không có ý nghĩa. – Vijay

+0

Không hoàn toàn - gọi 'keys' trong một ngữ cảnh void làm _something_ nhưng tôi rất nghi ngờ đó là những gì các coder gốc dự định. – Sobrique

Trả lời

8

keys(%S)[email protected]_fields; giống hệt keys(%S) = scalar @C_fields;

và từ perldoc -f keys

Được sử dụng như một giá trị trái, phím cho phép bạn để tăng số lượng nhóm băm được cấp phát cho số băm đã cho. Điều này có thể giúp bạn có được một thước đo hiệu quả nếu bạn biết băm sẽ lớn lên. (Điều này cũng tương tự như trước kéo dài một mảng bằng cách gán cho một số lượng lớn đến $ # mảng.) Nếu bạn nói

keys %hash = 200;

sau đó% băm sẽ có ít nhất 200 xô phân bổ cho nó - 256 trong số họ , trên thực tế, kể từ khi nó tròn lên đến sức mạnh tiếp theo của hai.

Vì vậy, băm %S sẽ nhận được số nhóm có kích thước tối thiểu là @C_fields mảng.

+0

Thông tin thêm về khóa/chủ đề thùng http://stackoverflow.com/questions/6723172/what-is-4-16-in-hashes –

+0

[Bài viết này] (http://blog.codinghorror.com/code-tells- bạn-how-comments-tell-you-why /) đến với tâm trí, đặc biệt là điểm cuối cùng. – RobEarl

+0

@RobEarl ý bạn là, để giải thích lý do tại sao một người muốn tự gán số lượng nhóm ở vị trí đầu tiên? –