swift - 只有一个值时,函数生成器不起作用?
问题描述
我有一个函数构建器
@_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
}
但不工作:(
任何想法?
解决方案
任何想法?
在失败的情况下发生的事情是直接{ 10 }
被视为类型的闭包,() -> Int
编译器似乎根本没有考虑函数构建器。生成的代码只是一个返回的函数10
。
这似乎是一个“特征”,其中{ 10 }
作为简单闭包的识别覆盖了其作为函数构建器使用的可能识别。这可能只是一个编译器问题,或者更糟糕的是它可能是一个语言定义问题......
请前往 feedbackassistant.apple.com 并提交报告。
推荐阅读
- sql - 截断 SQL 单元格中特定数量的字符
- r - 表单提交时出现 rvest 错误
- powershell - 从串口读取数据导致 Powershell 挂起
- regex - 编写正则表达式,查找单 l 词到双 l 词
- sql-server - SQL Server 矢量时钟
- regex - 不知道如何用 AppleScript 实现 REGEX
- angular - Angular 2 将 JSON 数组映射到模型类
- java - 根据点击次数设置 switch 语句
- python - Python 中的方法类似于 myArray.remove("john") 且不区分大小写
- solr - SOLR:对带有空格的文本字段进行模糊搜索