首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长生不老药: pipline的反宏和基准

长生不老药: pipline的反宏和基准
EN

Stack Overflow用户
提问于 2020-11-25 07:26:47
回答 1查看 46关注 0票数 0

我有宏,它应该可以帮助我减少延迟:

代码语言:javascript
复制
  defmacro instrument_duration(endpoint_name, block) do
    quote do
      {time, value} = :timer.tc(fn -> unquote(block) end)
      Histogram.observe(
        [name: :endpoint_duration_seconds, labels: [endpoint_name]],
        time
      )
      value
    end
  end

下面是使用它的代码:

代码语言:javascript
复制
    response =
      Instrumenter.instrument_duration(id,
        do_handle(params, context)
        |> prepare_response())

但我得到了Reason:undef\n', options: []错误。我在这里做错了什么?这条路对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 07:31:04

我要在这里回答这个问题。

TL;DR: labels: [endpoint_name]labels: [unquote(endpoint_name)]

您的代码不会取消引用块中的endpoint_name,导致不成功的编译器试图在引用块的上下文中解析endpoint_name

幸运的是,长生药在编译阶段提供了警告,而且一定有一些类似的

代码语言:javascript
复制
warning: variable "endpoint_name" is unused (if the variable
         is not meant to be used, prefix it with an underscore)

如果想要有一个健壮的代码,编译器警告是不能被忽略的,它们是故意提供的,并且是要考虑的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65000145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档