代码之家  ›  专栏  ›  技术社区  ›  sameera207

如何在Ruby中将参数传递给别名方法

  •  4
  • sameera207  · 技术社区  · 14 年前

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

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

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

    我希望你能明白这个问题。提前谢谢

    干杯

    萨梅拉

    3 回复  |  直到 9 年前
        1
  •  5
  •   Rohit    14 年前

    我试过这个,找到了解决办法

    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
  •  2
  •   Community CDub    8 年前

    我在学鲁比。所以当我看到这个问题时,我决定试试。虽然我还没有详细了解别名方法,但我遇到了一个解决方案。不知道是不是应该这样做。也说不清为什么会这样。可能是在我学习了几天之后,没有深入了解,我会补充的。现在,这里有一个可行的解决方案。

    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 在这个过程中也帮了我。

        3
  •  1
  •   Vijay Chouhan    9 年前

    我粘贴了一些别名方法的组合,可以帮助您

    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