gpt4 book ai didi

swift - 如何编写 Swift 中缀函数?

转载 作者:IT王子 更新时间:2023-10-29 05:50:11 27 4
gpt4 key购买 nike

我已经看到这样做了,但我就是无法理解它。不知何故,看起来很神奇,一些中缀函数工作正常,但其他函数根本无法编译。例如:

A function named "*" works fine, but one named "then" does not.

正如您在这里看到的,我的 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 ';'

最佳答案

Swift 标准库已经将 * 定义为中缀运算符:

infix operator * {
associativity left
precedence 150
}

您会在 Swift Standard Library Operators Reference .或者,在 Xcode 中的 import Swift 语句上“按住 command-click”并搜索“operator”。

要在“传统”函数调用中使用运算符,您必须将其括在括号中:

(*)("Left", 6)

如果你想定义你自己的中缀运算符,你必须添加一个中缀运算符声明。但是请注意,只有一组受限制的字符对运算符有效(请参阅 Language Reference->Lexical Structure->Operators 了解精确规则)。特别是,运营商名称必须(正如@dfri 已经说过的那样)以/、=、-、+、!、*、%、<、>、&、|、^、?、~ 或其他一些“符号”字符。特别是,“then”不是有效的运算符名称。

关于swift - 如何编写 Swift 中缀函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com