是否可以别名to_s?

Jos*_*ter 2 ruby alias ruby-on-rails alias-method

to_s我不想覆盖我的模型,而是将其别名为现有的方法full_name.

双方aliasalias_method似乎并不如预期的工作.

运用 alias

class Person < ActiveRecord::Base

  # ... other model code.

  alias to_s full_name

  def full_name
     "#{first_name} #{last_name}"
  end
end

# In Terminal
> Person.last.to_s  #=> "#<Person:0x007fa5f8a81b50>"
Run Code Online (Sandbox Code Playgroud)

运用 alias_method

class Person < ActiveRecord::Base

  # ... other model code.

  alias_method :to_s, :full_name

  def full_name
     "#{first_name} #{last_name}"
  end
end

# In Terminal
> Person.last.to_s  #=> "#<Person:0x007fa5f8a81b50>"
Run Code Online (Sandbox Code Playgroud)

Jos*_*ter 7

弄清楚了...

alias并且alias_method需要你要别名的方法之后来.

所以以下两项工作都很好:

运用 alias

class Person
  def full_name
     "#{first_name} #{last_name}"
  end

  alias to_s full_name
end

# In Terminal
> Person.last.to_s  #=> "Don Draper"
Run Code Online (Sandbox Code Playgroud)

运用 alias_method

class Person
  def full_name
     "#{first_name} #{last_name}"
  end

  alias_method :to_s, :full_name
end

# In Terminal
> Person.last.to_s  #=> "Don Draper"
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人.

  • 这里要注意的重要一点是`alias_method`调用在评估的那一点*声明*的任何方法都会生效.这意味着您可以为随后覆盖的方法添加别名,保留原始行为而不使用原始名称. (2认同)