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
хранится в виде некой композиции функций. Когда оценка необходима, она оценивается. Если вы не хотели, чтобы колбаса производилась, вам не следовало идти на колбасный завод.