Функция Builder не работает, когда только одно значение? - PullRequest
3 голосов
/ 16 октября 2019

У меня есть функцияBuilder

@_functionBuilder
struct MyBuilder {
    static func buildBlock(_ numbers: Int...) -> Int {
        var result = 0
        for number in numbers {
            result += number * 2
        }
        return result
    }
}

Функция

func myFunc(@MyBuilder builder: () -> Int) -> Int {
    builder()
}

использование

let a = myFunc {
    10
    20
}
print(a) // print 60 is work!

, но

let b = myFunc {
    10
}
print(b) // print 10?

Почему b нет20?

Я пытаюсь добавить другой buildBlock

static func buildBlock(number: Int) -> Int {
    return number * 2
}

Но не работает: (

Есть идеи?

1 Ответ

1 голос
/ 17 октября 2019

Есть идеи?

В неудачном случае происходит то, что { 10 } обрабатывается как закрытие типа () -> Int напрямую, а компилятор нерассмотреть построитель функций вообще. Созданный код - это просто функция, которая возвращает 10.

. Это похоже на «функцию», где распознавание { 10 } в качестве простого замыкания отменяет его возможное распознавание как использование построителя функции. ,Это может быть просто проблема компилятора или, что еще хуже, проблема определения языка ...

Пожалуйста, зайдите на feedbackassistant.apple.com и отправьте отчет.

...