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实例中成为全局树?我是否应该将树放在一个循环()中,并使用其他函数在模块中向它传递消息?