Erlang:如何资产匹配IoDevice值?

Erlang:如何资产匹配IoDevice值?,erlang,Erlang,我正在尝试编写一个打开文件的测试。File open返回以下格式的值: {ok,IoDevice}{error,Reason} IoDevice示例值为: 到目前为止,我已经尝试了以下方法(其中一些我不相信它们会成功……): ?资产匹配([],设备)。 ?资产匹配(“[]”,其名称)。 ?资产匹配(,设备)。%不会编译 还有几次测试,但我失败了 什么是匹配IoDevice模式的方法 是否有可能匹配正则表达式 谢谢 file:open/2始终返回包含两个元素的元组: 原子ok和处理文件的进程(

我正在尝试编写一个打开文件的测试。File open返回以下格式的值:

{ok,IoDevice}{error,Reason}
IoDevice示例值为:

到目前为止,我已经尝试了以下方法(其中一些我不相信它们会成功……):

?资产匹配([],设备)。
?资产匹配(“[]”,其名称)。
?资产匹配(,设备)。%不会编译
还有几次测试,但我失败了

什么是匹配IoDevice模式的方法

是否有可能匹配正则表达式


谢谢

file:open/2
始终返回包含两个元素的
元组:

  • 原子
    ok
    和处理文件的进程(genserver)的pid
  • 或:

  • 原子
    错误
    和字符串。但由于字符串是创建列表的快捷方式,因此元组实际上包含atom
    error
    和一个列表
  • 但是,
    设备
    是一个原子,它永远不会匹配空列表,
    []
    ,或两元素列表,
    “[]”
    ,这是创建列表的快捷方式
    [91,93]

    您无法提前知道处理文件的进程的pid,因此无法尝试匹配特定的pid,但您可以断言您从
    文件:open/2
    返回了
    {ok,}
    。如果您想变得更细粒度,可以使用
    检查第二个元素is_pid/1

    ?assert(is_pid(File)).
    
    您可以像这样手动创建pid:

    list_to_pid("<0.4.1>") -> pid()
    
    list_to_pid(“”)->pid()
    
    list_to_pid("<0.4.1>") -> pid()