site/language_struct.rb

tests/_examples/site/language_struct.rb in the metorex repository.

Point = Struct.new(:x, :y) do
  def distance_to(other)
    Math.sqrt((x - other.x)**2 + (y - other.y)**2)
  end
end

a = Point.new(0, 0)
b = Point.new(3, 4)
p a.distance_to(b)
p b.to_a
p b == Point.new(3, 4)

Coordinate = Data.define(:latitude, :longitude)
here = Coordinate.new(latitude: 36.16, longitude: -86.78)
p here
p here.with(latitude: 40.71)

Output:

5.0
[3, 4]
true
#<data Coordinate latitude=36.16, longitude=-86.78>
#<data Coordinate latitude=40.71, longitude=-86.78>