【问题标题】:Swift REPL Unexpected BehaviourSwift REPL 意外行为
【发布时间】: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


【解决方案1】:

这里发生的所有事情都是 REPL 让您了解 Swift 内部的一些潜在效率。 p 存储为某种函数组合。当需要评估时,它会被评估。如果你不想看到做香肠,那你就不该进香肠厂。

【讨论】:

  • 香肠厂,不错。
猜你喜欢
  • 1970-01-01
  • 2017-07-31
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2019-05-01
  • 2011-07-15
  • 2011-04-27
相关资源
最近更新 更多