o = Object.new
o.instance_eval { @str = "foo" }
p o # => #<Object:0x5dd1a0 @foo="bar">
Điều này là tốt. Gọi p
với đối tượng làm đối số in đầu ra của phương thức inspect
. Nhưng, không may, nếu đối tượng có một phương pháp to_s
ghi đè sau đó nó sẽ ra đầu ra của rằng:Thi đua đối tượng mặc định # kiểm tra đầu ra?
class << o
def to_s; @str; end
end
p o.to_s # => "foo"
p o # => foo
Vì vậy, để khắc phục điều này, chúng ta phải xác định một phương pháp inspect
trên đối tượng của chúng tôi:
class << o
def inspect; "blah"; end
end
p o # => "blah"
Làm cách nào để tạo phương thức của phương thức inspect
đối tượng của tôi theo cách Ruby mặc định như trong dòng 3 của ví dụ mã đầu tiên của tôi?
Gần nhất tôi có là dưới đây, nhưng tôi không chắc chắn nếu nó hoàn toàn đúng
class << o
def inspect
vars = instance_variables.collect { |v| v.to_s << "=#{instance_variable_get(v).inspect}"}.join(", ")
"#<#{self.class}:0x#{object_id} #{vars}>"
end
end
Bạn đang sử dụng phiên bản Ruby nào? –