【发布时间】:2014-12-31 02:13:15
【问题描述】:
如果我在 Swift repl 中使用以下代码,我会得到意想不到的结果:
1> func addA(s: String)->String {
2. return s + "a"
3. }
4.
5. func addB(s: String)->String {
6. return s + "b"
7. }
8>
9> println(addA(""))
a
10> println(addB(""))
b
11> println(addA(addB("")))
ba
12> let p = addA(addB(""))
p: ((String)) = {
_core = {
_baseAddress = 0x0000000100500060
_countAndFlags = 2
_owner = (instance_type = Builtin.RawPointer = 0x0000000100500040)
}
}
13> println(p)
ba
14> let q = "a" + "b"
q: String = "ab"
为什么声明 p 会产生这种行为,而声明 q 不会?
【问题讨论】:
-
什么“行为”?
p产生ba。这不是你所期望的吗?这对我来说似乎是正确的答案。 -
@matt,我收集到被引用的行为是解释器关于
p是什么的大量文章,core/base/blah/blah的东西:-) -
好吧,如果你使用 REPL 一段时间,这种事情就不再是“意外”了,嗯 @paxdiablo ?
标签: string pointers swift read-eval-print-loop