2017-05-18 6 views
1

[%a/b]を​​3210に変更します。 基本的には、Change path or refinementと同じ、代わりfile!で:ファイルのパスを変更する

私はどちらかchange next test/1 'ctest/1/2: 'c作品、この場合、a/c

test: [a/b] 

にブロック内a/bを変更したいです。 でもないtestfile!のとき:

changeしようとして
>> test: [%a/b] 
== [%a/b] 
>> test/1 
== %a/b 
>> test/1/2   ; can't access 2nd value 
== %a/b/2 
>> next first test ; not quite what you expect 
== %/b 

それはあなたが期待するものをない与える:

>> change next test/1 'c 
== %b 
>> test 
== [%acb] 

答えて

4

、彼らは同じように見えることができますが、その性質は非常に異なっています。

path!がスラッシュ記号で区切られた値の集合(しばしばword!値)であり、file!char!値の集合です。 file!シリーズのスラッシュ文字は単なる文字なので、file!にはサブ構造についての知識がありません。それはstring!シリーズのセマンティクスを(ほとんど)持ちますが、path!のセマンティクスはblock!シリーズです。

は今、これがクリアされていることを、test/1/2結果について、file!シリーズのパス表記がstring!上とは異なる振る舞いを持ち、それは、アクセサとして動作するのではなく、スマート連結を行います。それがうまく左右の部分に存在する余分なスラッシュ文字を処理しますので、それはスマートと呼ばれています。たとえば:

>> file: %/index.html 
== %/index.html 

>> path: %www/ 
== %www/ 

>> path/file 
== %www/file 

>> path/:file 
== %www/index.html 

同じパス表記ルールがあまりにもurl!シリーズに適用されます:file!string!として、基本的に動作するよう、test: [%a/b]のネストされた内容を変更するための

>> url: http://red-lang.org 
== http://red-lang.org 

>> url/index.html 
== http://red-lang.org/index.html 

>> file: %/index.html 
== %/index.html 

>> url/:file 
== http://red-lang.org/index.html 

だから、あなたがのために、利用可能な任意の方法を使用することができます文字列を変更します。例:ここでは

>> test: [%a/b] 
== [%a/b] 

>> change skip test/1 2 %c 
== %"" 

>> test 
== [%a/c] 

>> change next find test/1 slash "d" 
== %"" 

>> test 
== [%a/d] 

>> parse test/1 [thru slash change skip "e"] 
== true 

>> test 
== [%a/e] 
+1

''私は何だった[「e」を終了するにはスラッシュ変更スルー]テスト/ 1を解析し、それらを処理するディレクトリに適し必要です。ありがとう –

3

ファイルは文字列型であり、あなたがしたいのと同じ方法で操作することができます文字列を変更します。例:

test: [%a/b] 
replace test/1 %/b %/c 
3

これはファイルです!任意の配列ではなく、任意の文字列です!

>> any-string? %a/c 
== true 
>> any-array? 'a/c 
== true 

したがって、ファイル内のディレクトリセパレータ '/'!アクションの変更に特別な意味はありません。したがって、%a/bの 'a'、 '/'、 'b'は同じ方法で扱われ、インタプリタは2つのセグメントファイルパス[a b]に解析しようとしていません。

パスの場合、配列のため、各コンポーネントはrebol値であり、インタプリタはそれを知っています。たとえば、a/bcdの 'bcd'は、 'b'、 'c'、 'd'の3文字ではなく、全体として(単語!)表示されます。

私はファイルに同意します!任意の文字列であること!便利ではない。あなたがpath!file!シリーズを混乱さ

1

は多分厄介なソリューションですが、ファイル

test/1: to-file head change skip split-path test/1 1 %c 
関連する問題