String 迅速回复意外行为

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(""))

如果在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
不会产生这种行为?

这里发生的一切是,REPL让您在Swift内部了解一些潜在的效率
p
存储为某种函数组合。当需要评估时,会对其进行评估。如果你不想看到香肠被制作出来,你就不应该进入香肠工厂。

什么“行为”<代码>p产生
ba
。这不是你所期望的吗?对我来说,这似乎是正确的答案。@matt,我想所提到的行为是译员关于
p
是什么的一篇大文章,
core/base/blah/blah
东西:-)好吧,如果你和REPL一起工作一段时间,这种事情就不再是“意外的”,嗯@paxdiablo?香肠工厂,不错。