Câu hỏi này đã được hỏi ở đây , nhưng nhận được câu trả lời kém và không làm rõ vấn đề. Tôi tin rằng nó biện minh cho việc hỏi lại.
Tôi hiểu rằng bạn có thể gõ vịt bằng các ngôn ngữ được nhập động hoặc với các ngôn ngữ được nhập tĩnh (nhưng ví dụ về những ngôn ngữ này rất hiếm, chẳng hạn như các mẫu của C ++).
Tuy nhiên tôi không chắc có ngôn ngữ nào được gõ động mà không cần gõ vịt hay không .
Gõ vịt có nghĩa là loại đối tượng dựa trên các hoạt động và thuộc tính mà nó có tại một thời điểm nhất định. Có cách nào để gõ động mà không cần hỗ trợ gõ vịt không?
Chúng ta hãy xem mã Python này để tìm hiểu:
def func(some_object)
some_object.doSomething()
something = Toaster()
func(something)
Trong các ngôn ngữ được gõ động, loại đối tượng chỉ được biết khi chạy. Vì vậy, khi bạn cố gắng thực hiện một thao tác trên nó (ví dụ some_object.doSomething()
), thời gian chạy chỉ có một lựa chọn - đó là kiểm tra xem loại some_object
hỗ trợ doSomething()
đó, chính xác là gõ vịt là gì.
Vì vậy, có thể có một ngôn ngữ gõ động mà không cần gõ vịt? Vui lòng giải thích.
1 + "1"
. Trong trường hợp của Python, quy tắc kiểm tra gần như không có và việc triển khai mã người dùng để kiểm tra các loại nếu người dùng (trái ngược với thời gian chạy của Python) thấy nó hữu ích. Cũng lưu ý rằng gõ vịt so với gõ không phải vịt là giống nhau so với gõ cấu trúc (xem Wikipedia).