Простая ошибка определения класса в smalltalk

Я пытаюсь использовать smalltalk с веткой smalltalk/x-jv. У меня есть следующий простой код:

Object subclass: Myclass[
    |mainval|
    init [mainval := 555]
    getmainval [^mainval]
]

gc := Myclass new.
gc init.
gc getmainval printNl.

Я пытаюсь запустить его в командной строке с stc команда smalltalk/x-jv, но она не работает. Ниже приводится ошибка:

$ ./stc testsrc.st 
testsrc.st, line 1: Error: syntax error in 'class definition' near "Myclass" (char/token=286 / 0x11e) (fileIn expression)

Где проблема и как ее можно решить? Спасибо за вашу помощь.

1 ответ

Решение

Изменить - Добавление информации о stc а также stx

Боюсь, вы не можете использовать код GNU Smalltalk непосредственно в Smalltalk/X(ветка -jv). Также было бы неплохо увидеть, какова ваша конечная цель в серии вопросов Smalltalk.

Для вас важно понимать, что Smalltalk был разработан для работы в IDE, если вы хотите создать приложение, вам следует использовать предоставленную IDE. Если вы хотите создать пример приложения, есть даже руководство для Smalltalk / X. Это, конечно, не означает, что вы не можете запустить скрипт из командной строки (Smalltalk / X обладает мощной оболочкой).

Тем не менее, есть файл пакета подсвечивания Smalltalk / X для Sublime Text 3, сделанный мной и размещенный в BitBucket. Я создал его в основном для Smalltalk и встроенной подсветки языка Си.

Сначала вы, вероятно, используете stx исполняемый и не stc, stc это сокращение для smalltalk-to-C компилятор. stc создает код C, который затем может быть скомпилирован компилятором C в объектный файл, который затем может быть связан с конечным исполняемым файлом (вместе с другими классами smalltalk и средой выполнения).

smalltalk или же stx является средством запуска, которое может выполнять сценарии smalltalk или открывать полнофункциональную среду разработки. Если вы знакомы с Java, подумайте о stc по состоянию на javac а также smalltalk или же stx по состоянию на java,

Вы можете использовать панель запуска, которая называется smalltalk (bash-скрипт для * nix и batch / powershell для windows), использующий stx.com в конце, но предоставляя некоторые дополнительные функции.

использование smalltalk --help см. параметры командной строки.

Сначала я начну с простого однострочного текста, который вы можете использовать:

stx.com -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'
A message on stdout on Transcript

на окнах вы, если вы используете smalltalk Вы получаете больше информации:

smalltalk -I --quick --eval "Transcript showCR: 'A message on stdout on Transcript'

"[INFO] PowerShell detected: ->TRUE<-.
"[INFO] The latest latest_powershell_version found: 5.1.16299.1004."
"[INFO] With the runtime being: v4.0.30319."
VERBOSE: [INFO] Manual switch detected - configuration is ignored
VERBOSE: [INFO] Executing asynchronously command: C:\prg_sdk\stx8-jv_swing\build\stx\projects\smalltalk\stx.com  -I
--quick --eval "Transcript showCR: 'A message on stdout on Transcript'"   | Out-null
VERBOSE: A message on stdout on Transcript
VERBOSE:
VERBOSE: [INFO] Exiting from PowerShell with code 0

VERBOSE: [INFO] End. Exiting correctly.

Теперь давайте перейдем к вашему вопросу сценариев

Вначале лучший способ - создать класс в IDE и создать файл из него. Затем вы увидите правильную структуру .st файл должен иметь.

У меня есть простой файл script.st для вас (это аналогично тому, что вы получите в файле Out of IDE):

"{ NameSpace: Smalltalk }"

Object subclass:#MyClass
    instanceVariableNames:'mainValue'
    classVariableNames:''
    poolDictionaries:''
    category:''
!

!MyClass methodsFor:'accessing'!

mainValue

    ^ mainValue
!

mainValue: newValue

    mainValue := newValue
! !

!MyClass methodsFor:'initialization & release'!

initialize

    super initialize.
    mainValue := 555.
! !


gc := MyClass new.
gc initialize.
Transcript showCR: gc mainValue.

Как вы запускаете такой скрипт?

smalltalk --execute script.st

Выход будет: 555

Если вы хотите писать сценарии без "объектов" (ну, в Smalltalk все является объектом, но вы здесь не определяете класс), вы можете сделать это просто transcript.st:

| mainValue |

mainValue := 555.
Transcript showCR: mainValue.

снова выполните это как: smalltalk --execute transcript.st чтобы получить идентичный результат.

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