我有以下问题:
t := #(1,2,3)
t at: 1 -> 1
t at: 2 -> #,
Run Code Online (Sandbox Code Playgroud)
这对我来说是个问题,如何获得以下效果:
t at 1 -> 1
t at 2 -> 2
Run Code Online (Sandbox Code Playgroud)
#(1,2,3)是一个数组字面其中元件或者通过空间或通过分离型,所以在端你得到的阵列用5项其中两个是逗号符号:#,(#用于显示符号文字).
您需要将数组定义为#(1 2 3).
还有一个数组表达式:{1 . 2 . 3},但这是评估的东西.例如,你可以做{1 . 2 . 2 + 4 . a + b}一些你不能用文字数组做的事情,#()因为它们必须在编译时定义.例如,在编译期间我不知道变量a和b我使用的变量
好.让我们借此机会提供更完整的文字描述.
Smalltalk中有几种类型的文字
整型
十进制
10
-1
0
1000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)十六进制
16rAB1F
16r0
-16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)ScaledDecimal
17s0
3.14159265s8
Run Code Online (Sandbox Code Playgroud)其他
8r7731 (octal)
2r1001 (binary)
10r99987 (decimal again!)
etc.
Run Code Online (Sandbox Code Playgroud)人物
$A (uppercase)
$a (lowercase)
$ (space!)
$? (unicode)
$1 (not to be confused with 1)
Run Code Online (Sandbox Code Playgroud)
字符串
'' (empty string)
' ' (string with 1 space)
'Hello world'
Run Code Online (Sandbox Code Playgroud)
符号
#hello
#'hello world'
#'' (empty symbol, not very useful)
#+
#1 (not the integer 1)
Run Code Online (Sandbox Code Playgroud)
的ByteArray
#[1 2 3 4] (separators are blank)
#[] (empty ByteArray)
#[0 0 0 0 255] (length is arbitrary)
Run Code Online (Sandbox Code Playgroud)
数组
#(256 16rAB1F 3.14s2 2r1001 $A #this)
Run Code Online (Sandbox Code Playgroud)
请注意,文字数组使用任何种类和数量的空格作为separtors
#(256
16rAB1F
3.14s2
2r1001
$A #this) (same as above)
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以撰写文字
#[255 16rFF 8r377 2r11111111] (four times 255)
#(#[1 2 3] #('string' #symbol)) (arrays of arrays)
Run Code Online (Sandbox Code Playgroud)
有一些"容忍*宽松的符号
#(symbol) = #(#symbol) (missing # => symbol)
#('string' ($a 'a')) (missing # => array)
Run Code Online (Sandbox Code Playgroud)
但不是这里:
#([1 2 3]) ~= #(#[1 2 3]) (missing # => misinterpreted)
Run Code Online (Sandbox Code Playgroud)
然而
#(true nil false) (pseudo variables ok)
Run Code Online (Sandbox Code Playgroud)
但不是在这里!
#(self) = #(#self) (missing # => symbol)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,存在一些不一致之处:
a.而伪变量true,false和nil被接受为文本内部阵列,伪变量self和super被解释为符号(使用不合格的字符串的更一般的规则.)
b.虽然写#不是强制性的(为了在数组中启动嵌套数组并且括号足够,但必须编写#[用于启动嵌套的ByteArray.
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |