1 min read

Method parameters and constructing defaults in Ruby

Under shoulda known but didn't
Method parameters and constructing defaults in Ruby
Photo by Sam Moghadam Khamseh / Unsplash

Under shoulda known but didn't.

Ruby methods can have defaults:

def hello(message: 'World')
  puts "hello #{message}"
end

The default can call an initializer:

class Greeting
  def initialize(message)
    @message = message
  end

  def message
    @message
  end
end

def hello(message: Greeting.new)
  puts "hello #{message.message}"
end

And the initializer can take parameters:

class Greeting
  def initialize(message = 'there')
    @message = message
  end

  def message
    @message
  end
end

def hello(message: Greeting.new('World'))
  puts "hello #{message.message}"
end

And you can refer to earlier argument values:

class Greeting
  def initialize(message = 'there')
    @message = message
  end

  def message
    @message
  end
end

def hello(announcement: 'gorgeous', message: Greeting.new(announcement))
  puts "hello #{message.message}"
end