متدهای جادویی در روبی

متدهای to_s، <=>، each، method_missing و سایر متدهای جادویی روبی

متدهای جادویی چیست؟

متدهای جادویی متدهای خاصی هستند که روبی به‌طور خودکار فراخوانی می‌کند.

to_s — نمایش رشته‌ای

class Person
  def initialize(name)
    @name = name
  end

  def to_s
    "Person(#{@name})"
  end
end

p = Person.new("علی")
puts p           # => Person(علی)
puts "نتیجه: #{p}"  # => نتیجه: Person(علی)

<=> — عملگر فضایی (برای sort)

class Product
  attr_reader :price

  def initialize(name, price)
    @name = name
    @price = price
  end

  def <=>(other)
    @price <=> other.price
  end

  def to_s
    "#{@name}: #{@price}"
  end
end

products = [
  Product.new("A", 100),
  Product.new("B", 50),
  Product.new("C", 200)
]

sorted = products.sort
puts sorted.inspect

method_missing — متد ناموجود

class Dynamic
  def method_missing(name, *args)
    "متد \#{name} با آرگومان‌های \#{args.inspect} پیدا نشد!"
  end
end

d = Dynamic.new
puts d.hello           # => متد hello با آرگومان‌های [] پیدا نشد!
puts d.greet("علی")    # => متد greet با آرگومان‌های ["علی"] پیدا نشد!

respond_to_missing?

class Dynamic
  def method_missing(name, *args)
    "پیدا نشد: #{name}"
  end

  def respond_to_missing?(name, include_private = false)
    true  # یا منطق خودتان
  end
end

خلاصه

متدتوضیح
to_sنمایش رشته‌ای
<=>مقایسه (sort)
==برابری
method_missingمتد ناموجود
eachپیمایش (Enumerable)

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط