2

例:

st> [ fnord := 7 ] value

私はいつも、彼らが で SystemDictionary に入ったという印象を受けていましたが、そうではSmalltalkありません。

st> [ fnord := 7 ] value
st> Smalltalk at: #fnord
Object: SystemDictionary new: 512 "<0x2acfca382030>" error: Invalid argument #fnord: key not found

ただし、少なくとも GNU Smalltalk では、値はどこかに永続化されているようです--- アクセスするfnordと正しい値が返されます。

st> [ fnord := 7 ] value
st> fnord
7

更新:ブロックを分解する方法を見つけました! 本当に大変です。

st> [ fnord := 7 ] block inspect
An instance of CompiledBlock
  header: 32768
    clean-ness flags: 0
    number of arguments: 0
    number of temporaries: 0
    number of literals: 4
    needed stack slots: 8
  method: UndefinedObject>>executeStatements
  literals: [
    [1] {fnord}
    [2] a BlockClosure
    [3] #block
    [4] #inspect
  ]
  byte codes: [
    [1] source code line number 1
    [3] push 7
    [5] store into Global Variable {fnord}
    [7] pop stack top
    push Global Variable {fnord}
    [9] return stack top
  ]
[] in UndefinedObject>>executeStatements

したがって、それは間違いなくグローバル変数に書き込んでいると考えています。

4

1 に答える 1