【问题标题】:How do I pick elements from a block using a string in Rebol?如何使用 Rebol 中的字符串从块中选择元素?
【发布时间】:2013-02-26 16:00:04
【问题描述】:

给定这个块

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!

【问题讨论】:

    标签: rebol


    【解决方案1】:

    你需要用正确的根来完成输入字符串路径,然后 LOAD 并评估它。

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

    【讨论】:

    • 啊,太好了!谢谢!我把它修整到这个 - do join 'fs path
    • @DocKimbel,这是您在 R2 或 R3 中实际得到的输出吗?我没有得到相同的...
    • @Adrian,用 2.7.6.3.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
    

    【讨论】:

    • 您在 R2 或 R3 中测试过示例吗?尝试第一个示例时出现错误(但使用 Windows 路径)。
    • @Adrian,上面 DockKimble 的解决方案对我有用,你看到什么错误?另外,Windows路径是什么意思? Rebol 的路径类型需要正斜杠 afaik。
    • @Moliad,是的,我知道路径类型。但是谢谢你在这里解释。
    • @rebnoob:例如,当您尝试执行p: '/c/utils 时,您会得到** 语法错误:无效的“word-lit”--“'”。所以你不能使用文字来引用绝对路径。
    • @Adrian 路径!不是(基本上)用于磁盘路径,而是用于 rebol 代码浏览,所以你尝试的本质上没有意义。如果你想浏览磁盘,而不是 rebol 数据集,你必须简单地给 'FS 一个文件值!以及从那里浏览的其余路径...fs: %/c/ read dirize fs/windows 这适用于 R2 和 R3。我已编辑帖子以包含此示例。
    猜你喜欢
    • 2014-04-04
    • 2013-12-06
    • 2022-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多