如何在Rebol中使用字符串从块中选择元素?

时间:2013-02-26 16:00:04

标签: rebol

鉴于此块

fs: [
 usr [
  local [
   bin []
  ]
  share []
 ]
 bin []
]

我可以使用路径表示法检索项目,如下所示:

fs/usr/local

当路径是字符串时,我该怎么做?

path: "/usr/local"
find fs path ;does not work!
find fs to-path path ;does not work!

2 个答案:

答案 0 :(得分:5)

您需要使用正确的根完成输入字符串路径,然后加载并评估它。

>> path: "/usr/local"
>> insert path "fs"
>> do load path
== [
    bin []
]

答案 1 :(得分:2)

您知道Rebol有原生路径类型吗?

虽然这并没有完全回答你的问题,但我还是想在Rebol中添加一个如何直接使用路径的参考资料。 Rebol有 很多 的数据类型,如果可以,您应该利用这种丰富的语言功能。特别是当你开始使用和建立方言时,知道存在哪些类型以及如何使用它们会变得更加有效。

以下是如何在不使用字符串的情况下直接构建和运行路径的示例。为了表示源代码中的路径,可以使用 lit-path!数据类型。

示例:

>> p: 'fs/usr/local
== fs/usr/local
>> do p
== [
    bin []
]

你甚至可以追加一条操纵它的路径:

>> append p 'bin
== fs/usr/local/bin
>> do p
== []

如果它存储在一个块中,你使用一个路径!直接输入(不是点亮路径!):

>> p: [fs/usr/local/bin]
== [fs/usr/local]
>> do first p
== [
    bin []
]

还要注意直接使用路径比使用字符串更有优势,因为路径由一系列单词组成,与字符串示例相比,您可以更轻松地进行一些操作:

>> head change next p 'bin
== fs/bin/local

>> p: 'fs/path/issue/is
== fs/path/issue/is
>> head replace p 'is  'was
== fs/path/issue/w

而不是使用字符串:

>> p: "fs/path/issue/is"
== "fs/path/issue/is"
>> head replace p "is"  "was"
== "fs/path/wassue/is"

如果要浏览磁盘而不是Rebol数据集,则必须简单地为'FS提供文件的值!从那里浏览路径的其余部分(这是路径在文件!类型上的工作方式):

fs: %/c/ 
read dirize fs/windows