Ruby 3.0 からendless methodが導入された。

def raise_to_power(number, power) = number ** power

puts raise_to_power(2, 3) #=> 8

ref. Ruby 3 adds endless method definition - BigBinary Blog

便利なユースケース

endless method + Data.define を使った例。

# Ruby 3

class Vec < Data.define(:x, :y, :z)
  def +(v) = Vec[x + v.x, y + v.y, z + v.z]
  def -(v) = Vec[x - v.x, y - v.y, z - v.z]

  def *(c) = Vec[x * c, y * c, z * c]
  def /(c) = Vec[x / c, y / c, z / c]

  def dot(v) = x * v.x + y * v.y + z * v.z
  def cross(v) = Vec[y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x]
end

使ってみる。

> v1 = Vec.new(2,3,4)
=> #<data Vec x=2, y=3, z=4>
> v2 = Vec.new(5,6,7)
=> #<data Vec x=5, y=6, z=7>
> v1 + v1
=> #<data Vec x=4, y=6, z=8>
> v1 + v2
=> #<data Vec x=7, y=9, z=11>
> v1 - v2
=> #<data Vec x=-3, y=-3, z=-3>
> v2 - v1
=> #<data Vec x=3, y=3, z=3>

元ネタ