关于类定义的Struct.new

时间:2013-08-23 03:17:23

标签: ruby

我今天遇到some interesting Ruby code

class MeetingReminderJob < Struct.new(:user, :meeting)
  def perform
    send_reminder(user, meeting)
  end
end

< Struct.new(:user, :meeting)的目的是什么?

2 个答案:

答案 0 :(得分:2)

Struct是一个ruby类,它创建了一个包含属性和访问器的Class对象,您不需要显式定义类。在api中,您可以找到更多详细信息:http://www.ruby-doc.org/core-1.9.3/Struct.html

在您的情况下,它创建一个包含2个名为“user”和“meeting”的属性的类,然后类MeetingReminderJob继承它。

答案 1 :(得分:1)

这是另一个例子:

class Animal
  def greet
    puts "Hi.  I'm an animal"
  end
end

def get_class
  return Animal
end

class Dog < get_class
  def warn
    puts "Woof."
  end
end

Dog.new.greet
Dog.new.warn

--output:--
Hi.  I'm an animal
Woof.

另一个:

class Dog < Class.new { def greet; puts "Hi"; end }
  def warn
    puts "Woof."
  end
end

Dog.new.greet
Dog.new.warn


--output:--
Hi
Woof.