String 迅速回复意外行为
如果在Swift repl中使用以下代码,则会得到意外的结果:String 迅速回复意外行为,string,pointers,swift,read-eval-print-loop,String,Pointers,Swift,Read Eval Print Loop,如果在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(""))
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
不会产生这种行为?这里发生的一切是,REPL让您在Swift内部了解一些潜在的效率p
存储为某种函数组合。当需要评估时,会对其进行评估。如果你不想看到香肠被制作出来,你就不应该进入香肠工厂。什么“行为”<代码>p产生ba
。这不是你所期望的吗?对我来说,这似乎是正确的答案。@matt,我想所提到的行为是译员关于p
是什么的一篇大文章,core/base/blah/blah
东西:-)好吧,如果你和REPL一起工作一段时间,这种事情就不再是“意外的”,嗯@paxdiablo?香肠工厂,不错。