Функция копирования неизменного компактного класса для Genie

Этот код я перевёл из объяснения Vala's Memory Management

раздел:неизменяемые компактные классы с функцией копирования

Я пытаюсь запустить код этого Вала. Это работает как аспект.

Но сейчас у меня проблемы.

1: компилировать

ошибка: синтаксическая ошибка, ожидаемое объявление, но есть `['с предыдущим концом строки [неизменяемый]

2: я удаляю все атрибуты

ошибка: возврат со значением в пустую функцию

вернуть новый Foo ()

3: дать ему возвращаемое значение

construct copy (): Foo

ошибка: синтаксическая ошибка, ожидаемый идентификатор

construct copy (): Foo

мой код:

[indent = 4]

[Compact]
[Immutable]
[CCode (copy_function = "foo_copy")]
class Foo
    def method ()
        print "METHOD"

    construct copy ()
        return new Foo ()


init
    var foo = new Foo ()
    foo.method ()
    var bar = foo

Как я могу правильно перевести это на Genie?

1 ответ

Решение

Вы перепутали возвращаемое значение, Fooв Вале с конструктором. В Genie код будет:

[indent = 4]

[Compact, Immutable, CCode (copy_function = "foo_copy")]
class Foo
    def method ()
        pass

    def copy ():Foo
        return new Foo ()

init
    var foo = new Foo ()
    foo.method ()
    var bar = foo

Несколько атрибутов должны быть разделены запятыми.

Другие вопросы по тегам