时,我有简单的代码如下:错误分配函数变量
var println = print;
println("test");
它给我的错误:missing argument for parameter #2 in call
。我添加了更多参数:
println("test",".","\n");
它仍然给我同样的错误。为什么会发生?
时,我有简单的代码如下:错误分配函数变量
var println = print;
println("test");
它给我的错误:missing argument for parameter #2 in call
。我添加了更多参数:
println("test",".","\n");
它仍然给我同样的错误。为什么会发生?
这里是print
函数的定义:
public func print(_ items: Any..., separator: String = default, terminator: String = default)
当你得到它的引用,你丢弃的命名参数,如造成所有的投入都被视为因为Any...
的items
的元素是不预定义数量的参数。在这样的定义下,没有办法提供separator
和terminator
。
她是函数类型,因为它们是由斯威夫特看到:
因此,这会产生一个漏洞,当你参考一个这样的函数来参考vardiac params时,你将永远无法称之为成功?我注意到,当你引用func时,它总是会丢弃标签? – texasbruce
对。我用图像更新了一个答案,以显示作为代码转换结果的'print'和'println'的实际函数签名。我想你需要为它创建一个雷达。我假设这样一个任务应该继承原始函数的所有属性。 –
@texasbruce我想我的答案是你的问题的答案? ;) –
要不是有你需要做的是这样一些非常具体的原因,这应该实现尽管处于更迂回的方式:
func println (_ items: Any..., separator: String = " ", terminator: String = "\n") {
for item in items {
print(item, separator: separator, terminator: "")
}
print(terminator, separator: "", terminator: "")
}
println("test")
println("test",".","\n")
在您的错误消息之下,'我n call',它是否有专门指向'println'调用的'^',还是有另一个引用? – gravity
'var println = print'的目标是什么。为什么不使用'typealias'? – JAL
@JAL'typealias'只适用于类型,而不是函数;) – Hamish