有没有办法在使用erl_call时运行rr / 1成功?或者是否可以在erl_call中使用类似rr的类似函数?我想在erl_call中加载一些记录。 或者有没有办法在erl_call中定义记录。似乎rd / 1也不能在erl_call中使用:( 例如 echo" rr(MODULE)。" | erl_call -e
rr是shell函数,似乎不能在erl_call中使用
答案 0 :(得分:0)
rr,rd,rp ...仅对shell有用,它允许shell正确解释记录。
但请记住,记录只在编译时“存在”,在程序执行期间,它只退出tuples,所有语法如A#my_record{a_label = Value}
都被替换为元组函数,如{{1 }}
为实现此目的,编译器必须在文件中(或在包含的文件中)找到记录定义。
如果编译器在编译记录语法时没有找到记录定义,则会产生错误。
伪函数record_info / 2仅在编译期间可用,在编译后由其结果替换。
最后,如果你想在几个模块之间共享一条记录(虽然不推荐),一般的解决方案是将记录定义放在头文件中:File.hrl并包含这个文件必要时在模块中。
由于maps存在(它们是随Erlang / OTP R17引入的),我认为它们是在模块之间共享结构化信息的更好解决方案,至少在很多情况下是这样。 / p>