2009-07-04 5 views
0

Cela fonctionne:Building objet dans Rebol dynamique

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

Mais cela ne fonctionne pas

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

Pourquoi?

Répondre

2

Il y a tellement de façons de faire, mais voici une façon qui adhère de près à la façon dont vous semblez l'imaginer:

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

Dans un langage de programmation traditionnelle, vous faites quelque chose comme ça pour régler la valeur d'une variable:

x = 3; 

En REBOL, vous faites ceci:

x: 3 

Dans un langage de programmation traditionnel, = est un opérateur, mais : est et non un opérateur dans REBOL. C'est une partie du mot lui-même. C'est une distinction très importante, et c'est pourquoi ce que vous avez essayé de faire ci-dessus n'a pas fonctionné. x: est un set-word!, et pour en faire un à partir d'une chaîne, vous devez utiliser to-set-word.

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

De même, vous semblez confondre des objets et des blocs. Ceci est un objet:

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

Ceci est un bloc:

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

Ils ne sont pas les mêmes.

2

Le bloc "person" de reboltutorial ressemble exactement à celui de Geogory.

Mais en fait, person/1 (le bloc) est "id:" dans le premier message, le type sorcière est une chaîne !, id n'en est qu'une partie. dans le deuxième message, personne/1 est "id:", le type de sorcière est mot-clé !.

C'est la différence essentielle entre eux.