如何将参数传递给ruby中的别名方法

时间:2010-08-26 06:28:25

标签: ruby methods alias

我想在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

它给了我输出

我是同一个男人 我是同一个人

但现在我想将我的名字作为参数传递给第一个'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")

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

我希望你能清楚这个问题。提前致谢

欢呼声

sameera

3 个答案:

答案 0 :(得分:5)

我试过这个并且来到这个解决方案

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")

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

答案 1 :(得分: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也帮助了我。

答案 2 :(得分:1)

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

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