我看过这样的做法,但我就是无法理解它。某些中缀函数似乎神奇地正常工作,而其他一些则无法编译。例如:
如你所见,我的then
函数可以像传统函数一样工作,但不能作为中缀函数,然而我的*
函数则有相反的问题。有什么诀窍可以使我的then
函数成为中缀函数吗?
附带问题:为什么我的*
函数不能作为传统函数工作?
纯文本版代码和复制粘贴:
public func * (let left:String, let right:Int) -> String {
if right <= 0 {
return ""
}
var result = left
for _ in 1..<right {
result += left
}
return result
}
*("Left", 6) // error: '*' is not a prefix unary operator
"Left" * 6 // "LeftLeftLeftLeftLeftLeft"
public func then (let left:String, let _ right:String) -> String {
return left + right
}
then("Left", "Right") // "LeftRight"
"Left" then "Right" // 2 errors: Consecutive statements on a line must be separated by ';'