【问题标题】:how to pass parameters to an alias method in ruby如何将参数传递给ruby中的别名方法
【发布时间】:2026-01-14 12:45:02
【问题描述】:

我想在 ruby​​ 中创建一个别名方法并将参数传递给它。我设法做到以下几点

class User
  def say_name
    puts "I'm sameera"
  end
end

class User
  alias :tell_name :say_name
  def say_name
    puts "I'm sameera gayan"
    tell_name
  end
end

user = User.new
user.say_name

它给了我输出

我是sameera gayan 我是同龄人

但现在我想将我的名字作为参数传递给第一个“say_name”方法。所以新的代码会是这样的

class User
  def say_name(name)
    puts "#{name}"
  end
end

class User
  alias :tell_name :say_name(name)
  def say_name(name)
    puts "I'm sameera gayan"
    tell_name(name)
  end
end

user = User.new
user.say_name("my new name")

但现在这不起作用(将参数传递给别名方法)。所以我的问题是如何将参数传递给别名方法。

我希望这个问题对你来说很清楚。提前致谢

干杯

同人

【问题讨论】:

    标签: ruby methods alias


    【解决方案1】:

    我尝试了这个并得出了这个解决方案

    class User
    
            def say_name(name)
    
                  puts "#{name}"
    
            end
    
    end
    
    class User
    
            alias :tell_name :say_name
    
            def say_name(name)
    
                  puts "Hi"
    
                  tell_name(name)
    
            end
    
    end
    
    user = User.new
    
    user.say_name("Rohit")
    

    之所以有效,是因为我们无法将参数传递给别名。这就是你想要做的。

    【讨论】:

      【解决方案2】:

      我正在学习 Ruby。所以当我看到这个问题时,我决定尝试一下。虽然我还没有详细了解别名方法,但我遇到了一个解决方案。不知道是不是应该这样。而且还不能说为什么会这样。可能会在我没有深入了解后的几天内添加它。目前,这是一个可行的解决方案。

      class User
        attr_accessor :name
        def say_name
          puts "#{name}"
        end
      end
      
      class User
        alias :tell_name :say_name
        def say_name
          puts "I'm sameera gayan"
          tell_name
        end
      end
      
      user = User.new
      user.name = "Sameera"
      user.say_name 
      

      This qtn 在这个过程中也帮助了我。

      【讨论】:

      • 这看起来是正确的。正如sameera 所尝试的那样,别名不带参数。他们只是为方法取了另一个名字。
      • 嗨,克里斯蒂,感谢您的回复。但就我而言,我正在尝试覆盖 active_support 方法。因此,我无法添加属性或进行任何更改。 (在我的示例中,第一个 User 类)感谢 sameera
      【解决方案3】:

      我正在粘贴一些别名方法的组合,可以帮助你

      class Test
        def simple_method
          puts "I am inside 'simple_method' method"
        end
      
        def parameter_instance_method(param1)
          puts param1
        end
      
        def self.class_simple_method
          puts "I am inside 'class_simple_method'"
        end
      
        def self.parameter_class_method(arg)
          puts arg
        end
      
      
        alias_method :simple_method_new, :simple_method
      
        alias_method :parameter_instance_method_new, :parameter_instance_method
      
        singleton_class.send(:alias_method, :class_simple_method_new, :class_simple_method)
        singleton_class.send(:alias_method, :parameter_class_method_new, :parameter_class_method)
      end
      
      Test.new.simple_method_new
      Test.new.parameter_instance_method_new("I am parameter_instance_method")
      
      Test.class_simple_method_new
      Test.parameter_class_method_new(" I am parameter_class_method")
      

      输出

      I am inside 'simple_method' method
      I am parameter_instance_method
      I am inside 'class_simple_method'
      I am parameter_class_method
      

      【讨论】: