2013-02-26 14 views
2

鑑於此塊如何使用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! 

回答

5

您需要使用正確的根完成輸入字符串路徑,然後加載它並對其進行評估。

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

啊,很好!謝謝!我把它修剪成這樣 - do join'fs path – rebnoob 2013-02-26 20:44:44

+0

@DocKimbel,這是你實際得到的R2或R3中的輸出嗎?我得不到相同的結果... – Adrian 2013-02-28 01:07:54

+0

@Adrian,用2.7.6.3.1進行測試。 – DocKimbel 2013-03-10 00:57:57

2

你知道雷博爾有本地路徑類型

雖然這並不完全回答你的問題,但我想添加一個關於如何直接在Rebol中使用路徑的參考。 Rebol有很多數據類型,並且當你可以時,你應該利用豐富的語言功能。特別是當你開始使用和建立方言時,知道存在哪些類型以及如何使用它們變得更加有效。

下面是一個關於如何在不使用字符串的情況下直接構建和運行路徑的示例。爲了代表源代碼中的路徑,您可以使用光路!數據類型。

例如:

>> 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 
+0

您是否在R2或R3中測試了這些示例?當我嘗試第一個示例(但使用Windows路徑)時出現錯誤。 – Adrian 2013-02-28 01:10:36

+0

@Adrian,DockKimble的解決方案,爲我工作,你看到什麼錯誤?另外,你是什麼意思的Windows路徑? Rebol的路徑類型需要正斜槓afaik。 – rebnoob 2013-02-28 03:05:15

+0

@莫利亞德,是的,我知道路徑類型。但是謝謝你在這裏解釋它。 – rebnoob 2013-02-28 03:09:30

相關問題