2009-07-04 7 views
0

Dies funktioniert:Bauobjekt in Rebol dynamisch

>> 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" 

Aber das funktioniert nicht

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

Warum?

Antwort

2

Es gibt so viele Möglichkeiten, dies zu tun, aber hier ist ein Weg, die eng mit der Art und Weise halten Sie scheinen es zu vergegenwärtigen:

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

In einer traditionellen Programmiersprache, die Sie tun so etwas wie dies die festlegen Wert einer variablen:

x = 3; 

In REBOL, tun Sie dies:

x: 3 

In einer traditionellen Programmiersprache ist = ein Bediener, aber : ist nicht ein Bediener in REBOL. Es ist ein Teil des Wortes selbst. Dies ist eine sehr wichtige Unterscheidung, und deshalb hat das, was Sie oben versucht haben, nicht funktioniert. x: ist ein set-word!, und um einen aus einer Zeichenfolge zu erstellen, müssen Sie to-set-word verwenden.

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

Auch Sie scheinen Objekte und Blöcke zu verwirren. Dies ist ein Objekt:

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

Dies ist ein Block:

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

Sie sind nicht das gleiche.

2

Die "Person" -Block des Reboltutorials sieht genau gleich in Aussehen mit Geogory.

Aber in der Tat ist Person/1 (der Block) "ID:" in der ersten Post Hexe Typ ist eine Zeichenfolge !, ID ist nur ein Teil davon. im zweiten Beitrag, Person/1 ist "ID:", Hexe Typ ist Set-Wort !.

Dies ist der wesentliche Unterschied von ihnen.