2014-10-13 1 views
0

Я хочу вернуть значение, которое было передано int блоку. Если это число, все работает отлично, но если я добавлю значение String или boolean, я получаю сообщение «Не понимаю».smalltalk возвращающая строка из блока в VisualWorks

q := [ :a | a]. 
Transcript show: ((q value:'123') value) printString. 

Я думал, что все лечится одинаково, поэтому я смущен. Но я думаю, что я просто что-то упустил.

редактировать: это похоже на работу под Pharo ...

+0

вы можете предоставить _which_ сообщение не понял? – Tobias

+0

Pharo реализует объект >> значение для ответа на себя. Как сказал Дэвид, VW не делает этого по умолчанию, но это распространенное расширение. –

+0

Извините, что не публикуете эту информацию. Я новичок в VW и Smalltalk. Поэтому я не получил эту информацию. Теперь я знаю :) – TheTrowser

ответ

2

Сообщение «значение» не реализовано для объекта в VisualWorks. Некоторые приложения добавляют его, но это не в библиотеку базового класса. В некоторых версиях VisualWorks он поместился в библиотеку базового класса и впоследствии был выведен.

Если вы пишете код, как это будет работать:

q := [ :a | a]. 
Transcript show: (q value:'123') printString. 
0

отлично работает для меня.

| q | 
q := [ :a | a]. 
Transcript show: ((q value: true) value) printString. 

| q | 
q := [ :a | a]. 
Transcript show: ((q value: 123) value) printString. 

Если у вас есть исключение DNU, вы сможете увидеть, какой объект получает сообщение, которое не понято. Отправьте эту информацию.

+0

ByteString не понял сообщение. Видимо, не реализовано, как говорили другие :) – TheTrowser

1

Удалить из списка #value. Это не обязательно для вашего примера, как вы его описали. #value: отправляется блоку, который возвращает аргумент, как вы хотели. Затем вы отправляете #value в аргумент , который работает в Pharo, потому что он возвращает self и по существу не работает.

Это исправляет вашу ошибку, поскольку, как я подозревал, и Дэвид подтвердил, VisualWorks Strings DNU #value.

n.b. Как сказал Боб, ключевой недостающей информацией в вашем вопросе является «Какой объект DNU, какое сообщение?» В общем, чем конкретнее вы о своих ошибках, тем лучше ответы могут быть.

Смежные вопросы