как передать параметры в метод псевдонима в ruby - PullRequest
4 голосов
/ 26 августа 2010

Я хочу создать метод псевдонима в 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 Я SameEER

Но теперь я хочу пройтимое имя в качестве параметра для первого метода '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 ]

5 голосов
/ 26 августа 2010

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

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 голосов
/ 26 августа 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 также помог мне в этом процессе.

1 голос
/ 12 декабря 2015

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

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
...