0

次のようなことは可能ですか:

class A
  def a(var)
    puts "do something with #{var}"
  end
end

class B < A
  def a(var)
    var = var + "some modification"
    #this is what I want to do:
    super.a(var)
  end
end

ありがとう!

4

3 に答える 3

2

super呼び出しでメソッド名を使用することはできません

単独で使用すると、同じ引数を渡してクラスの実装superが呼び出されますsuper

class A
  def a(var)
    puts var
  end
end

class B < A
  def a(var)
    super
  end
end

B.new.a(1) #=> 1

変数を変更する場合は、引数を再割り当てするか、引数を渡す呼び出しをvar使用できますsuper

class A
  def a(var)
    puts var
  end
end

class B < A
  def a(var)
    var = 2
    super
  end
end

B.new.a(1) #=> 2

また

class A
  def a(var)
    puts var
  end
end

class B < A
  def a(var)
    super(2)
  end
end

B.new.a(1) #=> 2
于 2013-04-05T22:25:31.597 に答える
0

以下を試してください:

class A
  def a(var)
    puts "do something with #{var}"
  end
end

class B < A
  def a(var)
    var = var + "some modification"
    #this is what I want to do:
    #super.a(var)
    self.class.superclass.instance_method(:a).bind(self).call 12
  end
end

v = B.new
v.a("hello")

出力:

do something with 12

別のもの:

class A
  def a(var)
    puts "do something with #{var}"
  end
end

class B < A
    alias :old_a :a
  def a(var)
    var = var + "some modification"
    #this is what I want to do:
    #super.a(var)
    old_a 12
  end
end

v = B.new
v.a("hello")

出力:

do something with 12
于 2013-04-05T22:27:16.667 に答える