0

これは機能します:

>> Oblock: [FirstName: ""
[    LastName: ""
[    BirthDate: ""]
== [FirstName: ""
    LastName: ""
    BirthDate: ""
]
>> Person: Make Object! OBlock
>> Person
>> probe Person
make object! [
    FirstName: ""
    LastName: ""
    BirthDate: ""
]
>> Person/FirstName
== ""
>> Person/FirstName: "John"
== "John"

しかし、これは機能しません

>> List: ["Id" "FirstName" "LastName"]
== ["Id" "FirstName" "LastName"]
>> Person: []
== []
>> foreach attribute List [
[      Append Person to-word rejoin [attribute {: ""}]
[    ]
== [Id: "" FirstName: "" LastName: ""]
>> Person/FirstName
** Script Error: Invalid path value: FirstName
** Where: halt-view
** Near: Person/FirstName
>>

なんで ?

4

2 に答える 2

3

これを行うには非常に多くの方法がありますが、ここでは、あなたが思い描いているように見える方法に密接に準拠する 1 つの方法を示します。

list: [ "Id" "FirstName" "LastName" ]
person: []
forall list [
    repend person [to-set-word first list ""]
]
person: make object! person
print person/FirstName
; == ""

従来のプログラミング言語では、次のようにして変数の値を設定します。

x = 3;

REBOL では、次のようにします。

x: 3

従来のプログラミング言語で=は、 は演算子ですが、REBOL では演算子で:はありません。それは言葉そのものの一部です。これは非常に重要な違いであり、上記で試みたことがうまくいかなかった理由です。x:でありset-word!、文字列から作成するには、 を使用する必要がありますto-set-word

to-set-word "x"
; == x:

また、オブジェクトとブロックを混同しているようです。これはオブジェクトです:

person: make object! [ first-name: "Jasmine" last-name: "Byrne" ]

これはブロックです:

person: [ first-name "Jasmine" last-name "Byrne" ]

それらは同じではありません。

于 2009-07-25T10:55:24.893 に答える
2

reboltutorialの「person」ブロックは、Geogoryのものとまったく同じように見えます。

しかし実際には、person / 1(ブロック)は「id:」です。最初の投稿では、魔女のタイプは文字列です!、idはその一部にすぎません。2番目の投稿では、person / 1は「id:」、魔女のタイプはset-word!です。

これがそれらの本質的な違いです。

于 2010-11-21T00:54:12.103 に答える