smalltalk, возвращающий строку из блока в VisualWorks
Я хочу вернуть значение, которое было передано int в блок. Если это число, все работает отлично, но если я введу строковое или логическое значение, я получу "Сообщение не понятно".
q := [ :a | a].
Transcript show: ((q value:'123') value) printString.
Я думал, что все лечится одинаково, поэтому я в замешательстве. Но я думаю, что я что-то упустил.
редактировать: кажется, работает под Pharo...
3 ответа
Сообщение "значение" не реализовано для объекта в VisualWorks. Некоторые приложения добавляют его, но его нет в библиотеке базовых классов. В некоторых версиях VisualWorks он проскальзывал в библиотеку базовых классов и был позже удален.
Если вы напишите свой код так, он будет работать:
q := [ :a | a].
Transcript show: (q value:'123') printString.
Удалить отправку #value
, Это не обязательно для вашего примера, как вы это описали. #value:
отправляется в блок, который возвращает аргумент, как вы хотели. Вы тогда отправляете #value
к аргументу, который работает в Pharo, потому что он возвращает себя и по сути не работает.
Это исправляет вашу ошибку, потому что, как я подозревал и проверял Дэвид, DNW VisualWorks Strings #value
,
nb Как сказал Боб, ключевая недостающая информация в вашем вопросе - "Какой объект DNU, какое сообщение?" В целом, чем более конкретно вы описываете свои ошибки, тем лучше могут быть ответы.
У меня отлично работает.
| q |
q := [ :a | a].
Transcript show: ((q value: true) value) printString.
| q |
q := [ :a | a].
Transcript show: ((q value: 123) value) printString.
Если у вас есть исключение DNU, вы сможете увидеть, какой объект получает сообщение, которое не понято. Разместите эту информацию.