Swift REPL Неожиданное поведение

Если я использую следующий код в 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 не?

1 ответ

Решение

Все, что здесь происходит, это то, что REPL позволяет вам взглянуть внутрь Swift на некоторые из основных преимуществ. p хранится в виде некой композиции функций. Когда оценка необходима, она оценивается. Если вы не хотели, чтобы колбаса производилась, вам не следовало идти на колбасный завод.

Другие вопросы по тегам