如何在Ruby中向现有方法定义添加语句

如何在Ruby中向现有方法定义添加语句,ruby,metaprogramming,Ruby,Metaprogramming,我注意到对于类定义,如果我打开类MyClass,并在中间添加一些内容而不覆盖,我仍然得到了先前定义的原始方法。添加的新语句扩充了现有语句 但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开def my_method时,def和end中的现有语句被覆盖,我需要再次重写 那么,有没有办法使方法定义的行为与定义相同,比如super,但不一定是子类?我想您正在寻找: @浮雕,如果您不想在old_func之后执行包含条件返回的代码,该怎么办?正如您所看到的,它类似于Rails中的动作之前的。 例

我注意到对于类定义,如果我打开
类MyClass
,并在中间添加一些内容而不覆盖,我仍然得到了先前定义的原始方法。添加的新语句扩充了现有语句

但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开
def my_method
时,
def
end
中的现有语句被覆盖,我需要再次重写


那么,有没有办法使方法定义的行为与定义相同,比如
super
,但不一定是子类?

我想您正在寻找:


@浮雕,如果您不想在old_func之后执行包含条件返回的代码,该怎么办?正如您所看到的,它类似于Rails中的动作之前的。 例如:

class MyClass
  alias_method :old_func, :func

  def aloha
    puts 'Something'
    return smth if other_thing
    puts 'End of method'
  end

  def func
    aloha # Don't call :old_func if aloha return condition is true
    old_func
  end
end

MyClass.new.func # Should return <smth> from aloha method.
class-MyClass
别名_方法:old_func,:func
迪夫阿洛哈
放“某物”
如果有其他问题,请返回smth
放置“方法结束”
结束
def func
aloha#如果aloha返回条件为true,则不调用:old_func
老夫子
结束
结束
MyClass.new.func#应该从aloha方法返回。

这意味着语句应该在同一上下文中逐行执行。

您可以将旧方法存储在变量中。这在很大程度上是的重复。
class MyClass
  alias_method :old_func, :func

  def aloha
    puts 'Something'
    return smth if other_thing
    puts 'End of method'
  end

  def func
    aloha # Don't call :old_func if aloha return condition is true
    old_func
  end
end

MyClass.new.func # Should return <smth> from aloha method.