Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Định nghĩa Object Ruby tự mô tả với Custom to_s và Inspect Methods

Trong bài viết này, bạn sẽ học cách phương thức inspect trong Ruby hoạt động & tại sao chúng ta dùng nó.

Khi bạn in chuỗi hoặc mảng, bạn thấy nội dung của nó.

Ví dụ:

puts [1,2,3]
1
2
3

Nhưng khi bạn in object của riêng bạn…

Bạn thấy điều này:

#<Cat:0x29458e0>

Tại sao?

Bởi vì bạn chưa nói cho Ruby biết cách hiển thị class này theo cách có ý nghĩa.

Bạn có thể thay đổi điều này nếu định nghĩa phương thức như to_s.

Hãy xem cách đó hoạt động!

Triển khai to_s

Khi bạn dùng puts với object, Ruby gọi phương thức to_s để lấy biểu diễn chuỗi của object.

Mặc định bạn nhận được tên class (Cat)…

Bổ sung thêm số đại diện cho object_id ở dạng hex (0x29458e0).

Cách thay đổi:

class Cat
  def to_s
    "I'm a cat"
  end
end
puts Cat.new # "I'm a cat"

Nếu class của bạn có biến instance, bạn có thể làm cho chúng thành phần của mô tả object.

Như thế này:

class Cat
  attr_reader :color
  def initialize(color)
    @color = color
  end
  def to_s
    "I'm a #{color} cat"
  end
end
puts Cat.new("blue") # "I'm a blue cat"
puts Cat.new("white") # "I'm a white cat"

Bây giờ khi bạn in object này, bạn sẽ thấy thông tin hữu ích hơn.

Thú vị phải không?

Phương thức Inspect trong Ruby

Bạn có thể biểu diễn object theo hai cách có thể.

Thứ nhất:

Dùng to_s.

Đây là thứ bạn muốn user thấy khi hiển thị object.

Ví dụ, với object time, bạn sẽ hiển thị thời gian theo cách có ý nghĩa (2018-12-28 19:17:28), thay vì chỉ cho thấy cách time thực sự được lưu (1546021067).

Thứ hai:

Bạn có thể inspect object, điều này cho bạn phiên bản thô (raw) hơn của object.

Sự khác biệt là gì?

  • Định nghĩa to_s để khi bạn dùng puts, nó sẽ hiển thị view cụ thể này của object.
  • Định nghĩa inspect để giúp bản thân bạn & developers khác debug.

Ví dụ:

"abc".inspect

Hiển thị như:

"abc"

Inspect giữ lại dấu ngoặc kép, và ký tự đặc biệt (như \n cho newline) trở nên nhìn thấy.

Phần hay nhất?

Bạn có thể triển khai phương thức inspect trong class của mình 🙂

Cách làm:

class Cat
  attr_reader :color
  def inspect
    "Cat - id: #{object_id} - color: #{color}"
  end
end
Cat.new("white").inspect # "Cat - id: 23316588 - color: white"

Đó là cách bạn tạo object tự mô tả bản thân!

Video Tutorial

Tóm tắt

Bạn đã học cách dùng phương thức inspect & to_s trong Ruby để xây dựng class tốt hơn!

Nếu bạn thích bài viết này, hãy chia sẻ để nhiều người hơn tìm thấy nó.

Cảm ơn bạn đã đọc.