как передать параметры методу псевдонима в 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")

Но теперь это не работает (передача параметра в метод псевдонима). Итак, мой вопрос заключается в том, как передать параметры методу псевдонима.

Надеюсь, этот вопрос вам ясен. заранее спасибо

ваше здоровье

Самера


person sameera207    schedule 26.08.2010    source источник


Ответы (3)


Я попробовал это и пришел к этому решению

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

Причина, по которой это работает, заключается в том, что мы не можем передавать аргументы псевдонимам. И это то, что вы пытались сделать.

person Rohit    schedule 26.08.2010

Я изучаю Руби. Поэтому, когда я увидел этот вопрос, я решил попробовать. Хотя мне еще предстоит подробно узнать о методах псевдонимов, я нашел решение. Не знаю, так ли это должно быть сделано. И пока не могу сказать, почему так. Может быть, через несколько дней после того, как я изучу не подробно, я добавлю это. На данный момент вот рабочее решение.

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 

Этот qtn также помог я в процессе.

person Christy John    schedule 26.08.2010
comment
Это выглядит правильно. Псевдонимы не принимают параметры, как пытался самера. Они просто делают другое имя для метода. - person AboutRuby; 26.08.2010
comment
привет Кристи Спасибо за ответ. Но в моем случае я пытаюсь переопределить метод active_support. из-за этого я не могу добавить атрибут или внести какие-либо изменения. (В моем примере первый пользовательский класс) спасибо sameera - person sameera207; 26.08.2010

Я вставляю некоторую комбинацию метода псевдонима, которая может вам помочь

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
person Vijay Chouhan    schedule 12.12.2015