Trong Ruby, chúng ta gán các giá trị cho các đối tượng với toán tử =
.Ruby xử lý nhiệm vụ ngữ nghĩa như thế nào?
Kết hợp điều này với gõ ngầm và chúng tôi thường xuyên nhận được những tình huống như thế này:
myVar= :asymbol
Dòng trên cả hai tạo ra một đối tượng biểu tượng mới, và liên kết với các đối tượng để tên biến myVar
.
Về mặt ngữ nghĩa, cách thực hiện điều này?
Tôi đã có nó đóng vào đầu tôi rằng các nhà điều hành =
là không cú pháp ma thuật được xây dựng vào thông dịch viên, nhưng thực sự là đường chỉ là cú pháp cho phương pháp object.=(value)
. Với ý nghĩ này, tôi đoán là khi người phiên dịch thấy chúng tôi đang cố gán giá trị cho một tên biến không xác định, trước tiên nó tạo một đối tượng mới của một số loại đặc biệt, như undefined
hoặc null
hoặc gì đó, và sau đó chuyển thông báo :=
cho đối tượng đó với trọng tải là giá trị mà chúng tôi đang cố gắng chỉ định.
Tuy nhiên, gọi .class
trên đối tượng không được khởi tạo chỉ cần ném ngoại lệ vì Ruby cho rằng chúng tôi đang cố gắng gọi phương thức (tên của biến mà bạn đang cố gắng đưa vào tồn tại) trên self
> obj.class
> NameError: undefined variable or method 'obj' for main:Object
Vì vậy, theo như tôi có thể nói, tôi không có cách nào để tìm ra điều này bằng thực nghiệm.
Side lưu ý:
Trong trường hợp chuyển nhượng biểu tượng, tôi tin rằng giá trị được gán (AKA giá trị trả về bởi phương pháp object_id
đối tượng cụ thể của, AKA giá trị của unsigned long VALUE
biến trên C level) là một số đại diện cho một offset trong một bảng ở đâu đó (tôi tin rằng đây là cách Ruby đạt được 'giá trị tức thời' cho các đối tượng ký hiệu).
Trong các trường hợp khác, giá trị có thể là mã hóa trực tiếp của đối tượng hoặc giá trị được gán cho con trỏ tham chiếu đến struct
.
Bất kể cách nào Ruby đại diện cho đối tượng và liệu chúng tôi có chỉ định tham chiếu hoặc đối tượng không phải là những gì tôi hỏi ở đây.
câu hỏi khác:
lớp là gì =
phương pháp được thừa hưởng từ đâu? Tôi không thể tìm thấy nó trong thông số kỹ thuật cho Object hoặc BasicObject.
Giống như "Không có thìa", không có phương pháp '='. – tadman
Đây có phải là bản sao của câu hỏi này không? http://stackoverflow.com/questions/8345755/object-assignment-in-ruby –
@GeorgeStocker Câu hỏi được tham chiếu là về ** hiệu ứng ** của toán tử '=', trong đó như của tôi là về việc triển khai thực hiện trong Ruby. – LukeP