Tree Erlang:在beam可执行文件中使用gb_树函数,记录操作?

Tree Erlang:在beam可执行文件中使用gb_树函数,记录操作?,tree,erlang,record,Tree,Erlang,Record,关于gb_树结构的使用,我有几个问题,比如来自shell的基本输入,以及在没有shell输入的beam可执行文件中使用树 第一个问题是如何使用init()函数返回的树? Tree是否在程序生命周期内变为全局?例如,我是否需要将返回的树从shell传递到add_entry() 第二个问题涉及将参数传递到add_entry函数调用,例如gbt:add_entry(x,“10”),但这给了我一个异常错误: **异常错误:没有与gbt:add_条目(x,“y”)匹配的函数子句(gbt.erl,第23行)

关于
gb_树
结构的使用,我有几个问题,比如来自shell的基本输入,以及在没有shell输入的beam可执行文件中使用树

第一个问题是如何使用
init()
函数返回的
Tree
是否在程序生命周期内变为全局?例如,我是否需要将返回的树从shell传递到
add_entry()

第二个问题涉及将参数传递到
add_entry
函数调用,例如
gbt:add_entry(x,“10”)
,但这给了我一个异常错误:

**异常错误:没有与gbt:add_条目(x,“y”)匹配的函数子句(gbt.erl,第23行)

我还尝试在
add\u entry()
内使用
Tree=gb\u trees:enter(value,Data,Tree)
,但在编译时收到一个错误,其中
Tree
未绑定

我的最后一个问题是如何将记录存储/检索/删除/更新到名为
映射
(在源代码中声明)的gb_树中


Erlang中的数据结构是持久的。这意味着没有全局引用,并且始终将给定的树更新为新树

NewTree = gb_trees:empty(),
TreeOfSize1 = gb_trees:enter(hello, world, NewTree),
TreeOfSize2 = gb_tress:enter(foo, bar, TreeOfSize1).
请注意,
TreeOfSize1
仍然存在,并且它没有KV绑定
foo->bar
,因为Erlang保留了一个持久版本。这在许多情况下非常有用,因为保留对旧版本的引用会自动使您能够“返回”到该版本


至于bug,这是因为您正在编写
(值,数据)
,而不是
(值,数据)
。写入
value
是被称为
value
atom()
不是绑定,因此当您传递
x
时,它与函数不匹配,您会得到一个模式匹配函数\u子句错误。

Erlang中的数据结构是持久的。这意味着没有全局引用,并且始终将给定的树更新为新树

NewTree = gb_trees:empty(),
TreeOfSize1 = gb_trees:enter(hello, world, NewTree),
TreeOfSize2 = gb_tress:enter(foo, bar, TreeOfSize1).
请注意,
TreeOfSize1
仍然存在,并且它没有KV绑定
foo->bar
,因为Erlang保留了一个持久版本。这在许多情况下非常有用,因为保留对旧版本的引用会自动使您能够“返回”到该版本


至于bug,这是因为您正在编写
(值,数据)
,而不是
(值,数据)
。写入
value
是被称为
value
atom()
不是绑定,因此当您传递
x
时,它与函数不匹配,您会得到一个模式匹配函数\u子句错误。

这一行
Tree=gb\u trees:enter(value,Data,Tree),
?编译代码告诉我
gbt.erl:24:变量'Tree'未绑定
。代码似乎没有注意到
Tree=gb\u trees:empty()。
其中声明了
Tree
。我基本上希望代码在没有shell IO的情况下运行。基本上是根据代码本身的需要更新
gb\u树
,而无需任何shell输入。@lost\u使用\u编码,实际上您的树不存在任何存储位置。函数的所有变量都是局部变量。因此,init()->Tree=gb_trees:empty()。意思是:当您调用init()时,创建空树,然后确保变量树与该空树相等,然后忘记变量树并返回。@OdobenusRosmarus是否有办法使该树在运行的beam exe实例中成为全局树?我是否应该将树放在一个循环()中,并使用其他函数在模块内向它传递消息?这一行如何
Tree=gb\u trees:enter(value,Data,Tree),
?编译代码告诉我
gbt.erl:24:变量'Tree'未绑定
。代码似乎没有注意到
Tree=gb\u trees:empty()。
其中声明了
Tree
。我基本上希望代码在没有shell IO的情况下运行。基本上是根据代码本身的需要更新
gb\u树
,而无需任何shell输入。@lost\u使用\u编码,实际上您的树不存在任何存储位置。函数的所有变量都是局部变量。因此,init()->Tree=gb_trees:empty()。意思是:当您调用init()时,创建空树,然后确保变量树与该空树相等,然后忘记变量树并返回。@OdobenusRosmarus是否有办法使该树在运行的beam exe实例中成为全局树?我是否应该将树放在一个循环()中,并使用其他函数在模块中向它传递消息?