2010-08-01 31 views
7

Tôi đã quen với việc gõ động nghĩa là kiểm tra thông tin kiểu của cấu trúc đối tượng/không hướng đối tượng lúc chạy và ném một số loại lỗi, tức là nếu nó giống như vịt của nó. Có loại gõ động nào khác không (vui lòng xem chi tiết).Nhập động mà không cần gõ vịt?

Trả lời

1

Không, nhập động là khi giá trị có loại nhưng biến thì không, vì vậy hầu hết kiểm tra kiểu được thực hiện khi chạy. Vì vậy, về cơ bản, nếu giá trị đi hoặc quacks như một con vịt, đó là một con vịt, nếu không một lỗi được ném. Việc nhập Duck thực sự chỉ mô tả tính năng nhập động giúp đảm bảo tính năng an toàn (ví dụ: phương thức sẽ chỉ chạy nếu biến số foo 'có thuộc tính phù hợp hoặc có thể thực thi phương thức đó).

+4

Không chính xác. Nó không kiểm tra kiểu, chỉ loại có thể thực hiện một số toán tử X hoặc có một số thuộc tính Y. Nếu bạn gọi hàm toString() trên một biến, thì nếu nó là một đối tượng và nó thực hiện một phương thức toString() , sau đó nó sẽ được gọi, nếu không, bạn nhận được một lỗi. Nhưng nhiều loại có thể đáp ứng yêu cầu này. – siride

+0

Điểm tốt, tôi sẽ thực hiện chỉnh sửa –

5

Có, tuyệt đối. Duck-đánh máy là một thành ngữ mà nói rằng loại giá trị tại thời điểm này trong thời gian được dựa trên các lĩnh vực và phương pháp mà nó có ngay bây giờ. Nhập động chỉ nói rằng các loại được kết hợp với giá trị thời gian chạy, không phải với các biến và tham số tĩnh. Có một sự khác biệt giữa hai, và bạn có thể sử dụng cái sau mà không có cái cũ.

Ví dụ: nếu bạn đã lập trình bằng PHP và giới hạn bản thân với các loại cơ bản mà không sử dụng OO, thì bạn sẽ sử dụng tính năng nhập động mà không cần sử dụng tính năng nhập-gõ.

+0

Bạn có thể xây dựng trên ví dụ của mình không? là bạn chỉ đơn giản nói rằng kiểm tra kiểu lúc chạy là gõ động, trong khi kiểm tra dựa trên thử nghiệm sự tồn tại của phương pháp và tính chất của các đối tượng được gọi là gõ vịt? tức là, bạn sẽ nói rằng sự khác biệt giữa hai người phải làm với * đối tượng *? Trong cả hai trường hợp (hoạt động phi vịt và gõ vịt), có vẻ như khả năng tương thích của các hoạt động nhất định (gọi phương thức, bổ sung, vv) với các giá trị đầu vào được kiểm tra trong thời gian chạy; Có đúng không? sự khác biệt duy nhất là việc gõ vịt liên quan đến các đối tượng và việc gõ động là tổng quát hơn, đúng không? – EOL

+1

@EOL: Vâng, gõ kiểm tra là gõ động (thực sự nên được gọi là 'kiểm tra động', kiểm tra sự tồn tại của tài sản là gõ con vịt. Điều 'quan tâm' đối tượng là một chút mơ hồ để nói rằng nó đúng, nhưng tôi nghĩ chúng ta Cả hai đều trên cùng một trang –

+0

Cảm ơn! Bây giờ tôi thấy tốt hơn sự khác biệt giữa hai người. – EOL

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