вызов другого метода в суперклассе в рубине

Я использовал его для того, чтобы хранить объекты с файлами с отображенной памятью.
определенным примером была база данных изображения, которая обработала очень большие количества больших изображений (больше, чем мог уместиться в памяти).

47
задан IttayD 9 August 2009 в 11:12
поделиться

2 ответа

class B < A

  alias :super_a :a

  def a
    b()
  end
  def b
    super_a()
  end
end  
80
ответ дан 26 November 2019 в 19:28
поделиться

Нет хорошего способа сделать это, но вы можете сделать A.instance_method (: a) .bind (self) .call , который будет работать, но некрасиво .

Вы даже можете определить свой собственный метод в Object, чтобы он действовал как super в java:

class SuperProxy
  def initialize(obj)
    @obj = obj
  end

  def method_missing(meth, *args, &blk)
    @obj.class.superclass.instance_method(meth).bind(@obj).call(*args, &blk)
  end
end

class Object
  private
  def sup
    SuperProxy.new(self)
  end
end

class A
  def a
    puts "In A#a"
  end
end

class B<A
  def a
  end

  def b
    sup.a
  end
end
B.new.b # Prints in A#a
30
ответ дан 26 November 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: