DEV Community 👩‍💻👨‍💻

mixbo
mixbo

Posted on

The difference between Ruby alias and alias_method

Alt Text

In some open source ruby projects you may see similar alias and alias_method methods. what are the specific use of these two methods? how are these two methods different? let's look at the following code:

#alias
class User
  def full_name
    puts "Mixbo"
  end
  alias name full_name
end
User.new.name #=>Mixbo

#alias_method
class User
  def full_name
    puts "Mixbo"
  end
  alias_method :name, :full_name
end
User.new.name #=> Mixbo
Enter fullscreen mode Exit fullscreen mode

The above examples all output the "Mixbo" string before renaming the full_name in the User class. from this example alone we can't see the difference between the two methods continue:

#alias_method
class User
  def full_name
    puts "Super Mixbo"
  end
  def self.rename
    alias_method :name, :full_name #==> Note that alias_method is used here
  end
end

class Mixbo < User
  def full_name
    puts "Mixbooooo"
  end
  rename
end
Mixbo.new.full_name #=> "Mixbooooo"


#alias
class User
  def full_name
    puts "Super Mixbo"
  end
  def self.rename
    alias :name :full_name #==> Note that alias is used here
  end
end

class Mixbo < User
  def full_name
    puts "Mixbooooo"
  end
  rename
end
Mixbo.new.name #=> 'Super Mixbo'

Enter fullscreen mode Exit fullscreen mode

From the above example we can see that when there is an inheritance relationship between classes. alias will not affect its subclasses. related alias_method will find the closest method of the same name in its subclass to operate (for example, full_name above)

So alias and alias_method

  1. Can give an alias to a method

  2. alias is generally valid when the source code is interpreted by the compiler

  3. alias_method is generally valid when the code is running

Generally I use alias_method a little more.

Hope it can help you :)

Top comments (1)

Update Your DEV Experience Level:

Settings

Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. 🛠