`
liumengfan
  • 浏览: 32948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

record小记

阅读更多
今天阅读rabbitMQ代码,遇到一段代码很疑惑:
try
        log(info, "liufan the #v is ~p~n", [#v1.stats_timer]),
        run({?MODULE, recvloop,
        run({?MODULE, recvloop,
             [Deb, switch_callback(rabbit_event:init_stats_timer(
                                     State, #v1.stats_timer),
                                   handshake, 8)]}),
        log(info, "closing AMQP connection ~p (~s)~n", [self(), Name])
    catch
        Ex -> log(case Ex of
                      connection_closed_abruptly -> warning;
                      _                          -> error
                  end, "closing AMQP connection ~p (~s):~n~p~n",
                  [self(), Name, Ex])
    after


一致没看懂#v1.stats_timer它的意思,以为是这个field的默认值undefined,可是又不对
init_stats_timer(C, P) ->
    {ok, StatsLevel} = application:get_env(rabbit, collect_statistics),
    {ok, Interval}   = application:get_env(rabbit, collect_statistics_interval),   
    setelement(P, C, #state{level = StatsLevel, interval = Interval,               
                            timer = undefined}).


按理说应该是个整数,最后不得看看到底是怎么回事,写了一个测试函数
-module(test).

-export([start/0]).

-record(test, {a,b=1}).

start() ->
        io:format("~p~n", [#test.b]).


生成的abstract code竟然是:

{ok,{test,
        [{abstract_code,
             {raw_abstract_v1,
                 [{attribute,1,file,{"test.erl",1}},
                  {attribute,1,module,test},
                  {attribute,3,export,[{start,0}]},
                  {attribute,5,record,
                      {test,
                          [{record_field,5,{atom,5,a}},
                           {record_field,5,{atom,5,b},{integer,5,1}}]}},
                  {function,7,start,0,
                      [{clause,7,[],[],
                           [{call,8,
                                {remote,8,{atom,8,io},{atom,8,format}},
                                [{string,8,"~p~n"},
                                 {cons,8,
                                     {record_index,8,test,{atom,8,b}},
                                     {nil,8}}]}]}]},
                  {eof,9}]}}]}}


原来是索引值。

对比一下
-module(test1).

-export([start/0]).

-record(test, {a,b=1}).

start() ->
        Tmp = #test{},
        io:format("~p~n", [Tmp#test.b]).


生成的是
{ok,
 {test1,
  [{abstract_code,
    {raw_abstract_v1,
     [{attribute,1,file,{"test1.erl",1}},
      {attribute,1,module,test1},
      {attribute,3,export,[{start,0}]},
      {attribute,5,record,
       {test,
        [{record_field,5,{atom,5,a}},
         {record_field,5,{atom,5,b},{integer,5,1}}]}},
      {function,7,start,0,
       [{clause,7,[],[],
         [{match,8,{var,8,'Tmp'},{record,8,test,[]}},
          {call,9,
           {remote,9,{atom,9,io},{atom,9,format}},
           [{string,9,"~p~n"},
            {cons,9,
             {record_field,9,{var,9,'Tmp'},test,{atom,9,b}},
             {nil,9}}]}]}]},
      {eof,10}]}}]}}


看来还是的找到根源
分享到:
评论

相关推荐

    record record record record record record record record record

    record record record record record record record record record record record record record record record record record record record record record record record record record record record record ...

    AU3Record.rar

    AU3Record是一款基于AutoIt编写的自动化工具,主要用于录制并回放用户的鼠标和键盘操作。AutoIt是一种轻量级、高度灵活的脚本语言,专为自动化任务设计,尤其适用于Windows操作系统环境。它允许用户编写脚本来模拟...

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

    Oracle复合类型之RECORD

    Oracle复合类型之RECORD的深入浅出 Oracle复合类型之RECORD是Oracle数据库中的一种复杂数据类型,它允许用户定义一个包含多个字段的记录类型,类似于结构体或对象。 RECORD类型可以用于存储和处理复杂数据,使得...

    delphi 三层中传递自定义Record的例子

    本文将详细讨论如何在Delphi的三层架构中传递自定义Record类型的数据。 首先,我们需要理解Record在Delphi中的概念。Record是一种复合数据类型,它可以包含各种基本数据类型的字段,类似于其他语言中的结构体。...

    鼠标记录器AU3Record3.1汉化版(aura编写)

    【标题】"鼠标记录器AU3Record3.1汉化版(aura编写)"涉及的核心知识点是自动化工具和脚本编程,特别是与鼠标操作相关的自动化。AU3Record3.1是一款基于AutoIt3(AU3)语言编写的软件,用于记录并回放用户的鼠标动作,...

    demo_3.5.record

    Apollo demo record

    record_matlab中record_matlab_matlabrecord_

    在MATLAB中,`record`函数是一个非常实用的工具,尤其对于声音处理和信号分析的学习者来说。这个标题“record_matlab中record_matlab_matlabrecord_”暗示了我们正在探讨的是如何在MATLAB环境中使用`record`函数来...

    bin_audiorecord_audiorecord_QTaudio_

    本项目涉及的是一个基于Qt框架编写的音频录制软件,名为"bin_audiorecord_audiorecord_QTaudio_",它允许用户在Qt平台上进行音频的录制。下面我们将深入探讨这个项目的核心知识点,包括Qt框架和音频录制技术。 首先...

    根据说话人自动停止录音的arecord工具和代码

    在Linux环境下,录音任务通常由各种工具来完成,其中之一就是`arecord`。`arecord`是Advanced Linux Sound Architecture(ALSA)库的一部分,用于从声卡捕获音频数据。在某些场景下,我们可能需要实现一个语音活动...

    前端项目-videojs-record.zip

    **前端项目 - videojs-record 插件详解** `videojs-record` 是一个强大的前端插件,主要用于在Web浏览器中实现音频、视频以及图像的录制功能。这个插件基于流行的 HTML5 视频库 `video.js`,为开发者提供了一种简单...

    android的AudioRecord

    在Android平台上,AudioRecord类是用于实现低级别音频录制的核心组件。它允许开发者直接与设备的音频硬件交互,提供了一种高效且灵活的方式来捕获声音数据。本文将深入解析AudioRecord的使用方法及其在语音质量评测...

    trackrecord安装手册

    TrackRecord是Compuware公司的一款专业级缺陷管理工具,它为软件开发和测试团队提供了一种有效管理和跟踪问题的方法。该工具允许用户管理bug的状态,同时控制不同用户和团队的权限,确保信息的安全和准确流转,从而...

    利用AudioRecord录制音频并播放

    在Android平台上,AudioRecord类是用于低级别音频输入的关键组件,它可以让我们直接访问设备的音频硬件,进行实时的音频数据录制。在这个项目中,“利用AudioRecord录制音频并播放”,我们将会探讨如何使用Audio...

    基于AudioRecord和OpenSL ES两种框架的采集PCM数据功能的统一封装.zip

    基于AudioRecord和OpenSL ES两种框架的采集PCM数据功能的统一封装 基于AudioRecord和OpenSL ES两种框架的采集PCM数据功能的统一封装 基于AudioRecord和OpenSL ES两种框架的采集PCM数据功能的统一封装 基于Audio...

    aplay.tar.gz_alsa arecord源码_aplay 源码_aplay源码_linux alsa 录音_录音

    本文将深入探讨`aplay`和`arecord`这两个命令行工具的源码,它们是ALSA库的一部分,用于音频播放和录音操作。 `aplay`是一个简单的音频播放工具,它可以读取各种音频格式的数据并将其通过ALSA驱动发送到硬件进行...

    cyber_record-0.1.4-py3-none-any.whl

    pip install cyber_record出错 1.下载cyber_record-0.1.4-py3-none-any.whl包。 2.cd到存放whl文件的目录 3.pip install cyber_record-0.1.4-py3-none-any.whl

    alipay_record.zip

    alipay_record.zip推荐 n7102资源分享

    在三层中传递自定义Record类型数据的例子

    Record类型可以包含各种字段,如整数、浮点数、字符串等,甚至可以包含其他Record或枚举类型。在三层架构中,有时我们需要将自定义Record类型作为参数在各层之间传递,以实现更复杂的数据交换。 首先,我们需要在...

    AudioRecord 实现通话双向录音案例

    网上的通话录音大多数都是基于mediarecoder开发的,我最后反编译了一款apk,发现里面用的是audiorecord开发的,下面是我的核心代码展示,良心开发,不要差评谢谢

Global site tag (gtag.js) - Google Analytics