3

我正在7 周内尝试来自 7 种语言的以下示例:

Object ancestors := method(
    prototype := self proto
        if(prototype != Object,
            writeln("Slots of ", prototype type, "\n---------------")
            prototype slotNames foreach(slotName, writeln(slotName))
            writeln
            prototype ancestors))

如果我将代码与示例的其余部分(例如animals.io)一起放在一个文件中并通过命令行执行它,io animals.io那么它会按预期工作。

但是,如果我尝试手动键入该方法并为任何对象执行它,我会收到以下错误:

Exception: Object does not respond to 'prototype'
---------
Object prototype                     Command Line 1
Object ancestors                     Command Line 1

是否可以通过交互式解释器输入这种多行方法?

4

2 回答 2

2

在 REPL 中使用分号作为行分隔符。

Object ancestors := method(
    prototype := self proto;
        if(prototype != Object,
            writeln("Slots of ", prototype type, "\n---------------");
            prototype slotNames foreach(slotName, writeln(slotName));
            writeln;
            prototype ancestors))
于 2013-06-30T06:30:17.373 回答
1

虽然 Io REPL 允许您输入多行语句 [1],但不幸的是,它似乎只是将这些行连接在一起:(

Io> Object getSlot("ancestors")
==> method(
    prototype := self proto if(prototype != Object, writeln("Slots of ", prototype type, "\n---------------") prototype slotNames foreach(slotName, writeln(slotName)) writeln prototype ancestors)
)

[1] - 您可能需要在您的操作系统上安装 ReadLine

于 2012-10-23T09:45:19.010 回答