2011-02-06 30 views
38

Hãy để tôi giải thích bằng một ví dụ. Ở Delphi, bạn có thể viếtDelphi^Cú pháp: Tài liệu, ngụ ý, hoặc không có giấy tờ?

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
begin 
    if Key = ^C then 
    ShowMessage('The user wants to copy something.') 
    else if Key = ^V then 
    ShowMessage('The user wants to paste.') 
end; 

để kiểm tra các lệnh bàn phím Ctrl + C và Ctrl + V. Trên thực tế, cú pháp tương tự hoạt động với Ctrl + A, trong đó A là bất kỳ ký tự nào và - tất nhiên - bạn cũng có thể sử dụng câu lệnh case thay vì if s. Bạn thậm chí có thể làm ShowMessage(^A), vì vậy, rõ ràng, ^A được coi là char.

Tuy nhiên, khi duyệt the official Delphi documentation, tôi không thể tìm thấy bất kỳ tham chiếu nào đến cú pháp này. Nhưng có lẽ cú pháp ^A quá phổ biến đến mức nó được hiểu là một phần của định dạng tệp văn bản thuần túy cơ bản? Hay đơn giản nó là một tính năng không có giấy tờ của ngôn ngữ lập trình Delphi? (Lưu ý rằng các công trình trên thực tế được sử dụng trong mã nguồn RTL/VCL. Nhưng, tất nhiên, Embarcadero và Embarcadero một mình, được phép sử dụng các tính năng không có giấy tờ, nếu có.)

+2

ai cũng có thể sử dụng tính năng không có giấy tờ –

+0

@ David: OK, tôi đồng ý rằng vấn đề không phải là gần như là xấu như trong trường hợp của Windows API, ví dụ. –

+6

Một số người trong số họ, thông tin chi tiết về lỗi không thích, như '^ [' (Esc), '^ @' (NUL) .. –

Trả lời

28

Đây là từ lâu như một ký tự thoát để cho phép bạn có các ký tự cho các ký tự điều khiển theo cách dễ đọc hơn.

const 
    CtrlC = ^C; 
begin 
    Write(Ord(CtrlC)); 
end. 

này định nghĩa một hằng số với giá trị #3 Char, sau đó viết 3 trong Borland Pascal 7, và tôi nhớ nhìn thấy nó năm trước đó quá.

Tôi vừa kiểm tra các hướng dẫn ngôn ngữ Turbo Pascal 5.0 và Borland Pascal 7.0, nhưng không thể tìm thấy nó, vì vậy có vẻ như không có giấy tờ.

Edit: Tôi nhớ đây là một điều Borland, và chỉ checked: nó không phải là một phần của tiêu chuẩn ISO Pascal (trước đây điều này là ANSI Pascal chuẩn, nhờ Sertac cho nhận thấy điều này).

It được ghi lại trong Free Pascal documentation.

SGI sử dụng dấu gạch chéo ngược làm ký tự thoát, là per their docs.

Chỉnh sửa khác: Tôi tìm thấy nó documented in Delphi in a NutshellDelphi Basics site.

Tìm thấy: Chỉ tìm thấy nó ở trang 37 của Turbo Pascal 3 Reference Manual.

--jeroen

+1

Không có tiêu chuẩn ANSI về ngôn ngữ pascal từ năm 1993, khi ANSI chấm dứt nó thay mặt cho tiêu chuẩn ISO. Về tiêu chuẩn ISO, hãy xem nhận xét của tôi về câu hỏi của Andreas. –

+0

Đó là một câu trả lời tuyệt vời! Cảm ơn! –

+0

Afaik khi có các cuộc đàm phán về việc đơn giản hóa trình biên dịch (Delphi) vài năm trước, tính năng này, cùng với các công cụ như (..) Được sử dụng làm ví dụ –

3

Đây là một tài liệu chưa biết đặc tính. Nhưng sau đó một lần nữa, tài liệu cú pháp chính thức mới nhất là từ delphi 7.

+0

Bạn có biết nếu nó hoạt động trong Deplhi 7? –

+0

bạn có thể mô tả nó không. Loại^A là gì? –

+0

@David - Chú giải công cụ cái nhìn sâu sắc cho thấy nó là '# 1'. –

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