Có sự khác biệt nào nếu bạn định nghĩa Foo với instance_eval:. . .Có phải 'năng suất tự' giống như instance_eval không?
class Foo
def initialize(&block)
instance_eval(&block) if block_given?
end
end
. . . hoặc với 'năng suất tự':
class Foo
def initialize
yield self if block_given?
end
end
Trong cả hai trường hợp, bạn có thể làm điều này:
x = Foo.new { def foo; 'foo'; end }
x.foo
Vì vậy, 'yield self
' có nghĩa là khối sau Foo.new luôn được đánh giá trong bối cảnh của Lớp Foo.
Điều này có đúng không?
Trong "Chỉnh sửa để làm rõ" của bạn, bạn không có nghĩa là bản thân được mang đến obj trong khối? Có lẽ tôi chỉ đọc nó theo một cách khác nhưng tôi thấy đối tượng đang được khởi tạo, tự được mang đến khối như 'obj' và sau đó bên trong khối, phương thức foo được định nghĩa trên bản thân thông qua obj. – uzo
Tôi khá chắc chắn, chúng tôi có ý nghĩa tương tự. Tôi đã viết "trường hợp Foo mới được tạo ra" vì tự bên trong phương thức khởi tạo (là cá thể Foo mới được tạo) không giống như tự bên trong khối và nếu bạn chỉ nói "tự", bạn không rõ ý bạn là gì. – sepp2k