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

有很多方法可以做到这一点,但这里有一种方法与您似乎设想的方式密切相关:

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 的“人”块在外观上与 Geogory 的完全一样。

但实际上 person/1(the block) 是 "id:" 在第一个帖子中,女巫类型是一个字符串!, id 只是它的一部分。在第二篇文章中,person/1 是“id:”,女巫类型是 set-word!。

这是它们的本质区别。

于 2010-11-21T00:54:12.103 回答