本文共 1315 字,大约阅读时间需要 4 分钟。
致力于提升开发者体验,Elixir创建者José Valim这样写道。其中包括新增__STACKTRACE__
结构检索堆栈踪迹,集成Erlang新增的:logger
模块,改进Elixir的单元测试库ExUnit,支持文档元数据。
Elixir 1.7改进了异常系统,ArgumentError
、ArithmeticError
和KeyError
异常提供了更多的诊断信息,并且新增一个__STACKTRACE__
结构,可以用于代替System.stacktrace/0
来检索堆栈踪迹:
\try do\ ... 某个可能失败的操作 ...\rescue\ exception -\u0026gt;\ log(exception, __STACKTRACE__)\ reraise(exception, __STACKTRACE__)\end\\\
__STACKTRACE__
的作用域是在词法上确定的,不依赖于副作用,这点和System.stacktrace/0
不同。据Valim介绍,这将给未来的Elixir版本带来性能提升,因为它使得try
块结束后就不用再跟踪堆栈踪迹了。
Elixir 模块现在插入了Erlang的:logger
,这是由Erlang/OTP 21提供的,充分利用了后者丰富的元数据,包括:
:crash_reason
是一个包含两个元素的元组,第一个参数表示原因,包括抛出/错误/退出,第二个是堆栈踪迹。抛出的结构总是{:nocatch, term}
,错误总是Exceptions,而退出则涵盖了剩余的情况。\\t:initial_call
是进程开始时的初始调用。\\t:registered_name
是进程作为atom注册后的名称。\此外,如果消息没有有效记录,那么Logger
宏如debug
、info
等就不会对它们的参数求值,新增的:compile_time_purge_matching
选项允许基于编译时元数据过滤日志条目。例如,下面的代码展示了如何配置Logger
使其忽略来自application :foo
级别低于:info
以及所有来自Bar.foo/3
的日志调用:
\config :logger,\ compile_time_purge_matching: [\ [application: :foo, level_lower_than: :info],\ [module: Bar, function: \"foo/3\"]\ ]\\\
如上所述,Elixir的单元测试库也经过了改进,宏assert
返回的信息更详细了。例如,如果assert some_function(expr1, var2)
语句失败,它就会打印出some_function
的参数值,这样,就可以为开发人员节省下重新运行测试来查看它们的值的时间。
最后,Elixir 1.7还提供了文档注解作为文档元数据,如下所示:
\\\@moduledoc \"A brand new module\"\@moduledoc authors: [\"Jane\
转载地址:http://jamaa.baihongyu.com/