Hãy tưởng tượng một (tạo thành) bằng ngôn ngữ đơn giản mà các chức năng như sau:Có mối quan hệ nào giữa việc gọi một hàm và khởi tạo một đối tượng bằng các ngôn ngữ chức năng thuần túy không?
function f(a, b) = c + 42
where c = a * b
(Giả sử đó là một tập hợp con của Lisp bao gồm 'defun' và 'let'.)
Cũng tưởng tượng rằng nó bao gồm bất biến đối tượng trông giống như:
struct s(a, b, c = a * b)
Again analogizing để Lisp (thời gian này một superset), nói một định nghĩa struct như thế sẽ tạo ra các chức năng để:
make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Bây giờ, với thiết lập đơn giản, có vẻ như rõ ràng rằng có rất nhiều điểm giống nhau giữa những gì xảy ra đằng sau hậu trường khi bạn gọi 'f' hoặc 'make-s'. Khi 'a' và 'b' được cung cấp tại thời gian gọi/instantiate, có đủ thông tin để tính 'c'.
Bạn có thể nghĩ đến việc khởi tạo cấu trúc giống như gọi hàm, sau đó lưu trữ môi trường biểu tượng kết quả để sử dụng sau này khi các hàm truy cập được tạo được gọi. Hoặc bạn có thể nghĩ về việc đánh giá một hàm giống như tạo một cấu trúc ẩn và sau đó sử dụng nó làm môi trường biểu tượng để đánh giá biểu thức kết quả cuối cùng.
Mô hình đồ chơi của tôi quá đơn giản đến nỗi nó vô dụng? Hay thực sự là một cách hữu ích để suy nghĩ về cách ngôn ngữ thực sự hoạt động như thế nào? Có bất kỳ ngôn ngữ/triển khai thực sự nào mà một người không có nền tảng CS nhưng có quan tâm đến ngôn ngữ lập trình (tức là tôi) nên tìm hiểu thêm về để khám phá khái niệm này không?
Cảm ơn.
EDIT: Cảm ơn bạn đã trả lời cho đến thời điểm này. Để xây dựng một chút, tôi đoán những gì tôi đang tự hỏi là nếu có bất kỳ ngôn ngữ thực sự mà nó là trường hợp mà mọi người học ngôn ngữ được cho biết ví dụ "bạn nên nghĩ về các đối tượng như là bản chất đóng cửa". Hoặc nếu có bất kỳ triển khai ngôn ngữ thực nào trong trường hợp instantiating một đối tượng và gọi một hàm thực sự chia sẻ một số mã lệnh hoặc cấu trúc dữ liệu phổ biến (không tầm thường).
Liệu sự tương tự tôi đang làm, mà tôi biết những người khác đã thực hiện trước đây, đi sâu hơn so với tương tự trong bất kỳ tình huống thực tế nào?
Vâng, chắc chắn có sự tương tự. 'make-s' có thể được xem là nhà máy, theo định nghĩa là một hàm. Và tôi thực sự thấy nó thú vị, mặc dù không quá liên quan đến code-fu của tôi, để suy nghĩ về các phương thức (bao gồm các nhà máy/nhà thầu) như các hàm và phạm vi của hàm như một ánh xạ biểu tượng (/ string) => value. Python làm cả hai. 1 vì tôi thích những thứ như vậy. – delnan
Loại liên quan: http://stackoverflow.com/questions/2497801/closures-are-poor-mans-objects-and-vice-versa-what-does-this-mean – missingfaktor