Vraag Is er een eenvoudige (één regel) syntaxis naar alias één klassemethode?


Ik weet dat ik het volgende kan doen, en het zijn slechts 3 regels:

class << self
  alias :generate :new
end

Maar uit nieuwsgierigheid is er een eenvoudiger manier (zonder puntkomma's) zoals:

class_alias :generate, :new

50
2018-02-28 08:41


oorsprong


antwoorden:


Sinds Ruby 1.9 kunt u de singleton_class methode om toegang te krijgen tot het singleton-object van een klasse. Op deze manier hebt u ook toegang tot de alias_method methode. De methode zelf is privé, dus u moet deze gebruiken send. Hier is je enige voering:

singleton_class.send(:alias_method, :generate, :new)

Houd er echter rekening mee dat alias zal hier niet werken.


66
2017-10-10 13:35



Ik plak enkele voorbeelden van aliasmethoden

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

OUTPUT

I am inside 'simple_method' method
I am parameter_instance_method
I am inside 'class_simple_method'
I am parameter_class_method

6
2017-12-12 06:26



Ik geloof niet dat er een klassespecifieke versie van is alias. Ik gebruik het meestal zoals je eerder hebt aangetoond.

Hoe je het ook wilt onderzoek het verschil tussen alias en alias_method. Dit is een van die lastige gebieden van robijn die een beetje contra-intuïtief kunnen zijn. In het bijzonder het gedrag van alias met betrekking tot afstammelingen is waarschijnlijk niet wat u verwacht.

Ik hoop dat dit helpt!


3
2017-08-20 07:41