сообщение asArray
будет создавать и Array
из OrderedCollection
:
anOrderedCollection asArray
и это, вероятно, что вы хотите.
Однако, учитывая, что вы говорите, что хотите литеральный массив , возможно, вы ищете строку '#(1 2 3)'
. В этом случае я хотел бы использовать:
^String streamContents: [:stream | aCollection asArray storeOn: stream]
где aCollection
ваш OrderedCollection
.
Если вы еще не знакомы с streamContents:
, это может быть хорошей возможностью изучить его. Что она делает в этом случае эквивалентно:
stream := '' writeStream.
aCollection asArray storeOn: stream.
^stream contents
в том смысле, что она захватывает образец:
stream := '' writeStream.
<some code here>
^stream contents
который является довольно распространенным в Smalltalk.
UPDATE
Может быть, это помогло бы, если мы выясняем немного то, что мы подразумеваем буквенные массивы в Smalltalk. Рассмотрим следующие два метода
method1
^Array with: 1 with: 2 with: 3
method2
^#(1 2 3)
Оба метода ответа с того же массива, один с записями 1
, 2
и 3
. Однако две реализации различны. В method1
массив создается динамически (т. Е. Во время выполнения). В method2
массив создается статически (т. Е. Во время компиляции). Фактически, когда вы принимаете (и, следовательно, компилируете) method2
, массив создается и сохраняется в методе. Вместо этого в method1
нет массива, и результат создается каждый раз при вызове метода.
Следовательно, вам нужно было бы создать строку '#(1 2 3)'
(т. Е. Буквальное представление массива), если бы вы динамически генерировали код Smalltalk.
I _hope_ 'asArray' - это все, что вы хотите - мне может быть интересно узнать, зачем вам нужна строка, иначе :) – mgarciaisaia
@mgarciaisaia Да, я просто понял, что вы говорите и изменил мой ответ. –