Aaa = Struct.new(:a, :b)
x = Aaa.new
x.a, x.b = 1,2
y = Aaa.new
y.a, y.b = 1,2
x == y #=> true
Run Code Online (Sandbox Code Playgroud)
Struct定义==,eql?和hash你,这样两个Aaas为相等的,如果他们的价值观a和b是相等的.它还定义initialize为您可以选择传入值a以及b创建对象时(Aaa.new(value_for_a, value_for_b)).它定义to_a了返回[a,b].
您还可以使用Struct.new块来定义其他方法,因此您可以拥有"普通"类的全部功能:
Aaa = Struct.new(:a, :b) do
def c
a+b
end
end
Aaa.new(23,42).c #=> 65
Run Code Online (Sandbox Code Playgroud)
class Aaa
attr_accessor :a, :b
def ==(other)
return self.a == other.a && self.b == other.b
end
end
x = Aaa.new
x.a,x.b = 1,2
y = Aaa.new
y.a,y.b = 1,2
y = Aaa.new
y.a,y.b = 1,2
z = Aaa.new
z.a,z.b = 1,3
x == y # => true
x == z # => false
Run Code Online (Sandbox Code Playgroud)