Bạn không làm gì sai. Giả sử bạn thấy một cái gì đó như #<Adder:0xb7f9f710 @my_num=12>
thì trong Ruby đây chỉ là đại diện mặc định của đối tượng mà bạn đã tạo.
Nếu bạn muốn thay đổi hành vi này trở nên thân thiện hơn khi bạn chuyển đối tượng của mình đến puts
, bạn có thể ghi đè phương thức to_s (thành chuỗi). ví dụ.
class Adder
def initialize(my_num)
@my_num = my_num
end
def to_s
"Adder with my_num = #{@my_num}"
end
end
sau đó khi bạn làm puts y
bạn sẽ thấy Adder with my_num = 12
Bạn cũng có thể ghi đè lên các phương pháp inspect
đó là những gì được sử dụng, ví dụ, khi Ruby console IRB in các đại diện của đối tượng của bạn ví dụ
class Adder
def inspect
to_s # return same representation as to_s
end
end
sau đó trong IRB:
>> y = Adder.new 12
=> Adder with my_num = 12
Sẽ rất có ích khi sử dụng 'attr_reader: my_num' ở đây thay vì định nghĩa phương thức của riêng bạn. – tadman
Tất nhiên, nhưng tôi nghĩ rằng sử dụng một phương pháp getter sẽ rõ ràng hơn cho chủ đề khởi động :) Thật vậy, tôi đã cập nhật tin nhắn của tôi, nhờ – WarHog
Lưu ý rằng attr_reader đã được đề cập và sau đó attr_accessor đã được sử dụng. attr_reader cũng hoạt động. Nó chỉ cho phép bạn có được giá trị, trong khi attr_accessor cho phép bạn gán một giá trị mới cho my_num. –