2011-01-25 38 views
6

Tôi đang trong quá trình giảng dạy Perl tự của mình. Tôi đang sử dụng trình gỡ lỗi EPIC trong Eclipse. Bất cứ khi nào tôi có một var chỉ được sử dụng một lần trong một phụ tôi nhận được cảnh báo này:
Lỗi đánh máy thường hiển thị dưới dạng tên biến duy nhất. Nếu bạn có lý do chính đáng để có một tên duy nhất, thì hãy đề cập đến nó một lần nữa bằng cách nào đó để chặn thông báo. Tuyên bố C<our> là được cung cấp cho mục đích này.
C<our> là gì? Tìm kiếm chuẩn không xác định.Perl: Chính xác thì C <our> là gì?

+1

Khi bạn nói "tìm kiếm chuẩn không xác định", bạn có thử gõ [perldoc -f của chúng tôi] (http://perldoc.perl.org/functions/our.html) không? – Ether

+2

@Ether - không phải mọi người đều biết về (hoặc thậm chí có quyền truy cập vào) dòng lệnh perldoc. Hầu hết mọi người chỉ là Google. – DVK

+2

@Cooter => trong khi thêm ''' vào khai báo biến có thể ngăn chặn cảnh báo, lý do bạn nhận được nó là do biến chỉ được sử dụng một lần trong chương trình của bạn. Đây có thể là lỗi trừ khi bạn đang chơi trò chơi với các tham chiếu tượng trưng hoặc truy cập bảng biểu tượng trực tiếp (bạn không nên thực sự thực hiện khi học các kiến ​​thức cơ bản về ngôn ngữ). Bạn có thể đăng khối mã tạo cảnh báo không? –

Trả lời

11
  • As far as C<> phần có thể đã nhầm lẫn bạn, nó trông giống như EPIC mất một văn bản in POD format và in nó thô thay vì làm cho nó từ POD vào một văn bản định dạng.

    C<our> trong cú pháp POD có nghĩa là "Văn bản in" được định dạng dưới dạng mã "của chúng tôi, thường có nghĩa là phông chữ đơn cách. Điều này tương tự như StackOverflow's `our` backtick-surrounded format command câu hỏi của riêng bạn được sử dụng.

  • Các lỗi bản thân xuất phát từ diagnostics mô-đun Perl, mà cung cấp lời giải thích mở rộng cho các cảnh báo Perl khác hơi khó hiểu (trong trường hợp này, "Name '% s ::% s' được sử dụng một lần duy nhất: có thể typo"). Như một vấn đề của thực tế, đánh giá từ định dạng POD mà nhầm lẫn bạn, EPIC có thể sử dụng source POD from which the above-linked "perldiag" document was generated.

  • Nếu bạn đang hỏi our làm gì, bạn nên đọc perldoc -f our - đó là cách tạo bí danh thành biến toàn cầu có hiệu lực trong phạm vi nhất định (xem chi tiết của tchrist).

  • Theo như kỹ thuật googling trong trường hợp này, khi bạn đang tìm kiếm cụ thể cho những gì bạn mong đợi là từ khóa Perl, nó luôn trả tiền cho google cho "perldoc someKeyword".

+0

@Daxim - cảm ơn! – DVK

+0

Điều đó không đúng. 'our' không thể khai báo một biến như một phần của gói hiện tại. Nó khai báo một từ vựng là một phần của ** điểm ** hiện tại, cung cấp một bí danh vào biến gói cùng tên. Nhưng từ vựng là một phần của phạm vi, không phải là một gói, và do đó giữ lại ràng buộc bí danh của nó ngay cả khi bạn thay đổi các gói. 'gói bên ngoài; $ Outer :: Var = 10; $ Var của chúng tôi; gói bên trong; $ Inner :: Var = 20; nói $ Var; 'hoạt động tốt để có được 10 chữ in, không phải 20. Điều này cũng có nghĩa là bạn không thể thực hiện thủ thuật đánh bóng từ vựng thông thường của' my $ var = 10; {my $ var = $ var * 2; ...} '. Xem tất cả những gì hoạt động? – tchrist

+1

@tchrist - Tôi hy vọng bạn có nghĩa là ** phạm vi ** hiện tại và không phải * điểm * hiện tại, nếu không tôi sẽ hoàn toàn bối rối. Nếu nó chỉ là một lỗi đánh máy và không phải một số thuật ngữ perl sâu tôi chưa bao giờ nghe nói về trước đây, bạn hoàn toàn đúng. Lý do duy nhất của tôi là tôi không bao giờ sử dụng "của chúng tôi" theo những cách ưa thích như vậy (vì hầu hết mã Perl của tôi phần lớn là OO, nơi cách tiếp cận như vậy sẽ là thiết kế xấu). – DVK

2

Đây là thông báo Perl::Critic đề xuất bạn có thể sử dụng our $var; để định nghĩa biến :-) vì lý do được mô tả.

+1

Bạn có chắc đây là từ Perl :: Critic chứ không phải là 'diagnostics'? – DVK

+2

'của chúng tôi' không nói, xác định một biến. Nó cung cấp một bí danh lexically scoped mới cho một biến toàn cục hiện có. Điều đó có nghĩa là '$ x = 10' và' $ Big_X = 100' của chúng ta làm những điều rất khác nhau: xem xét điều gì xảy ra khi ở một khác, có lẽ phạm vi lồng nhau chúng ta có 'my $ x = 20' và' $ Big_X = 1_000 '. Đó là biến riêng tư hoàn toàn mới có tên '$ x', nhưng gói global' $ Big_X' chỉ thay đổi giá trị của nó. – tchrist

5

our là một bí danh được thuật toán từ vựng đến biến toàn cầu.

Các vấn đề liên quan