ruby - 使用 Aquarium 的 Ruby 异常处理中的 SystemStackError(面向方面​​的编程)

标签 ruby exception-handling aop

我正尝试在 Ruby 中使用 AOP 处理异常。我在这里使用的工具包是 Aquarium(http://aquarium.rubyforge.org/)。

我已经编写了一个示例代码,它将尝试映射写下的 ApplicationController 类的所有后代(子类)。

在执行以下程序时,我得到一个 SystemStackError(我也尝试使用“ulimit -s”设置堆栈限制)。有人请帮我这个!或者关于映射的任何建议:父类(super class)的子类的所有_方法都欢迎。提前致谢。

require 'aquarium'

include Aquarium::Aspects

class ApplicationController
end

class Abc < ApplicationController
    def func
        puts "func called"
        raise Exception.new # SystemStackError is thrown before reaching place
    end     
end

    #Dummy class
class Def < ApplicationController
end

Aspect.new :after_raising => Exception,
    :in_types_and_descendents => "ApplicationController" do |jp, object, *args|
        puts "Exception Handling Code"
end

a = Abc.new
a.func

最佳答案

您被要求使用一种只对 Java 这样没有模块(或 Scala 的特性)的语言有意义的方法?只要您需要模块文件,就可以通过使用 self.send :include 或类似方法将模块包含在需要的地方,而无需任何额外工作。

无论如何,我建议您阅读 Avdi Grimm 的 Exceptional Ruby 以了解异常在 Ruby 中的工作原理——同样与 Java 不同——正如已经指出的那样。

Ruby 不需要依赖注入(inject)——这完全违背了语言的哲学。

关于ruby - 使用 Aquarium 的 Ruby 异常处理中的 SystemStackError(面向方面​​的编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888904/

相关文章:

c# - 是否可以向上抛出异常

java - 我的 Android 应用程序崩溃了,即使我捕获了它所说的导致崩溃的异常

ruby - Thor 阅读配置 yaml 文件以覆盖选项

ruby - 在 Capybara-Webkit 中显示 @font-face 字体

python - 在 Django 中,如何获取异常消息?

java - Spring AOP setAdvice 仅在一种特定方法上

c# - 如何在.Net 平台上开始面向切面编程?

ruby - capybara :找不到 HTML 内容的链接

ruby-on-rails - CouchDB 文档模型更改?

java - Sonarqube 将 AOP Throwable 视为一个问题