Простая ошибка определения класса в 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
чтобы получить идентичный результат.