【问题标题】:What is the best way to save a hash! block in Rebol?保存哈希的最佳方法是什么!阻止Rebol?
【发布时间】:2019-11-30 08:46:31
【问题描述】:

我正在使用 Rebol2 并希望保留 HASH! 块。

目前我正在转换它to-string,然后使用save

有没有更好的方法?例如:

r: make hash! ["one" "two"]

我想将其保存到文件中,然后将其加载回r

【问题讨论】:

  • 你的问题不清楚。
  • 我稍微编辑了你的问题......但你可以进一步编辑它。也许您可能会提供一些您感兴趣的示例数据,以及您在 LOAD 回来时的期望。
  • 如果您在文件的散列块上使用save,它会将其保存为make hash! ["one" "two"] .. 好的,但我现在想将load 重新放入我的程序中?

标签: rebol red rebol2


【解决方案1】:

你已经非常接近你的目标了。只需使用save/allload

>> r: make hash! ["one" "two"]
== make hash! ["one" "two"]
>> save/all  %htest r
>> r: load %htest
== make hash! ["one" "two"]

如果您想在 Red 中获得相同的结果,您只需要多一个命令

>> r: do load %htest
== make hash! ["one" "two"]

【讨论】:

  • 就是这样! .. 至少在 Rebol2 中.. 在 Red 中不起作用
  • 你没有添加标签 Red..)
  • 我已经设法对我的代码做的一件事是让它与 Rebol2 和 Red 兼容。这是第一个障碍。
  • 如果您希望 RedRebol2 使用相同的来源,请使用 savedo load
【解决方案2】:

您可以像使用任何其他值一样执行此操作 - save,然后是 load

顺便说一句,使用hash! 进行持久存储的好处为零。 load 给你的是一个普通的block! ([make hash! [...]])。与仅加载 block! 相比,从此加载的数据填充哈希表需要更多时间,但之后的查找速度会更快。

换句话说,你可以:

>> save %database [one two]
>> make hash! load %database
== make hash! [one two]

如您链接的教程中所述。

【讨论】:

  • 我正在使用哈希!从头开始。我试图避免必须转换为块或字符串,然后“保存”它,只是为了加载块并散列!它在这个过程中。如果这是更好的方法(更快,更小的数据库存储),我不介意这样做。 save/all 似乎避免了这个哈希! / dehash 步骤。
  • @Atomica save/all 只是使用构造语法来存储值并保留它们的数据类型(+ 在特定情况下的额外信息),仅此而已。 load 在您提供 #[hash! [...]] 时仍然需要在运行时填充哈希表,或者您需要在 [make hash! [...]] 的情况下手动填充 do。做你所做的事情并没有速度/内存方面的好处 - 无论哪种方式,它都是文本数据(嗯,存储纯 block! 需要更少的字符,所以它可以为你节省几个字节)。
  • 好吧,在这种情况下,save/all 会更好,因为它可以节省步骤。
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 2012-06-23
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多