5

次の動的変数 (PHP 用語では「変数変数」) を作成しています。

foo: "test1"
set to-word (rejoin [foo "_result_data"]) array 5

しかし、「test1_result_data」という名前の結果変数の値を動的に取得するにはどうすればよいでしょうか? 私は次のことを試しました:

probe to-word (rejoin [foo "_result_data"])

ただし、単に「test1_result_data」を返します。

4

3 に答える 3

8

サンプル コードは REBOL 2 であるため、GET を使用して単語の値を取得できます。

>> get to-word (rejoin [foo "_result_data"])
== [none none none none none]

REBOL 3 は、REBOL 2 とは異なる方法でコンテキストを処理します。したがって、新しい単語を作成するときは、そのコンテキストを明示的に処理する必要があります。そうしないと、コンテキストがなく、設定しようとするとエラーが発生します。これは、単語のコンテキストをデフォルトで設定する REBOL 2 とは対照的です。

したがって、次のような REBOL 3 コードを使用して、動的変数を SET/GET することを検討できます。

; An object, providing the context for the new variables.
obj: object []

; Name the new variable.
foo: "test1"
var: to-word (rejoin [foo "_result_data"])

; Add a new word to the object, with the same name as the variable.
append obj :var

; Get the word from the object (it is bound to it's context)
bound-var: in obj :var

; You can now set it
set :bound-var now

; And get it.
print ["Value of " :var " is " mold get :bound-var]

; And get a list of your dynamic variables.
print ["My variables:" mold words-of obj]

; Show the object.
?? obj

これをスクリプトとして実行すると、次のようになります。

Value of  test1_result_data  is  23-Aug-2013/16:34:43+10:00
My variables: [test1_result_data]
obj: make object! [
    test1_result_data: 23-Aug-2013/16:34:43+10:00
]

上記の IN を使用する代わりに、BIND を使用することもできます。

bound-var: bind :var obj
于 2013-08-23T06:39:42.130 に答える
5

Rebol 3 のバインドは Rebol 2 とは異なり、いくつかの異なるオプションがあります。

最も不器用なオプションは次を使用していますload

foo: "test1"
set load (rejoin [foo "_result_data"]) array 5
do (rejoin [foo "_result_data"])

load が使用する関数があります -- intern-- これを使用して、一貫したコンテキストとの間で単語をバインドおよび取得できます。

foo: "test1"
set intern to word! (rejoin [foo "_result_data"]) array 5
get intern to word! (rejoin [foo "_result_data"])

そうto word!しないと、使いにくい非結合単語が作成されます。

3番目のオプションはbind/new、単語をコンテキストにバインドするために使用することです

foo: "test1"
m: bind/new to word! (rejoin [foo "_result_data"]) system/contexts/user
set m array 5
get m
于 2013-08-23T05:10:42.883 に答える
3
probe do (rejoin [foo "_result_data"])

http://www.rebol.com/docs/core23/rebolcore-4.html#section-4.6から

于 2013-08-23T03:28:49.383 に答える