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