読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

Squeakメモ

Squeak Smalltalk

使用してるのはSqueak-4.5-all-in-one

クラスコメントを書き換える方法、書き換えると出るエラーへの対処

参考:http://forum.world.st/Save-a-class-comment-in-Unix-Squeak-4-5-leads-to-RemoteString-past-end-of-file-td4771346.html

書き換えるとエラーが出るようになるので、まず右上のSearchからnextChunkPutで検索し、WriteStreamのnextChunkPutの最後にself flush.という行を追加し、セーブする。

ブラウザのinstanceとclassの間の?ボタンを押すとコメントが表示され、書き換えられる。

配列の長さ

array size.

length無いやん!って探しまわった。

OrderedCollectionを配列から作る

OrderedCollection newFrom: array.

OrderedCollectionにaddしたのにaddしたものが返ってくるヤンケ!

(OrderedCollection new) add: 1をprint itしても1が返ってきて追加できないのか??って悩んでた記憶がある。

正解は、addは追加したものを返すので(OrderedCollection new) add: 1; yourselfとOrderedCollectionのインスタンスそのものをくれよ、というメッセージを送る。

これによって、inject:into:でもちょっと悩んだ。

#(1 2 3 4 5) inject: (OrderedCollection new) into: [ :acc :x | acc add: x ].

「SmallIntegerはaddなんて知らんで!」と言われる。accにはOrderedCollection入ってるはずなのにナンデ、と思ったら入ってなかった。

#(1 2 3 4 5) inject: (OrderedCollection new) into: [ :acc :x | acc add: x. acc ].

accを返さねばならぬ。又はこう

#(1 2 3 4 5) inject: (OrderedCollection new) into: [ :acc :x | acc add: x; yourself. ].

コレクションはいろいろ繋げられる

#(1 2 3) , ((OrderedCollection new) add: 4; yourself) , 'hoge'
"=> #(1 2 3 4 $h $o $g $e)"

Streamに巨大なものを流し込む速さ

自由自在Squeakの252ページ

[
    100 timesRepeat: [
        stream := WriteStream on: ''.
        bigstr   := String new: 20000 withAll: $?.
        stream nextPutAll: bigstr.
    ]
] timeToRun.

WriteStream on:に空文字列を渡すと拡張し続けるからString new: 20000を渡して生成したほうがいい、という話だけど、Squeak4.5だとどちらも8msぐらいだった。Cog VMになったからか、Streamの仕様が変わったのかなあ。

広告を非表示にする