中缀 % 运算符在 Playground 中有效,但在包含的 Swift 库中无效
Infix % operator works in Playground, but not in included Swift library
我正在尝试为 Swift 中的双打重载 % 运算符。我意识到存在 Double 类型的两种方法的原因,但 truncatingRemainder()
的行为对我的用例来说工作正常。
我正在使用 Xcode Playgrounds 来解决这个问题,我想我已经解决了。
infix operator %
func % (left: Double, right: Double) -> Double {
return left.truncatingRemainder(dividingBy: right)
}
var x = 0.0
for _ in 0...5 {
print(x)
x = (x + 1.5) % 5.0
}
print(x)
这很好用,并给出了正确的预期行为。
在此之后,我尝试将其放入我正在处理的库中。我创建了一个新的 .swift 文件,重建了库,确保 import 语句在我的 Playground 中正常工作(通过使用我库中的其他 functions/methods),我得到以下错误:
- 为运算符
找到不明确的运算符声明
- 无法将“()”类型的值转换为预期的参数类型'Double'
- 运算符不是已知的二元运算符
任何人都可以解释将它放在我的 Playground 中和将它包含在导入文件中的区别吗?
对于库,您只需声明具有 public 访问权限的函数。不需要 infix operator %
。您正在执行运算符重载。
public func % (left: Double, right: Double) -> Double {
return left.truncatingRemainder(dividingBy: right)
}
infix operator
在您使用自定义运算符时需要。喜欢infix operator **
我正在尝试为 Swift 中的双打重载 % 运算符。我意识到存在 Double 类型的两种方法的原因,但 truncatingRemainder()
的行为对我的用例来说工作正常。
我正在使用 Xcode Playgrounds 来解决这个问题,我想我已经解决了。
infix operator %
func % (left: Double, right: Double) -> Double {
return left.truncatingRemainder(dividingBy: right)
}
var x = 0.0
for _ in 0...5 {
print(x)
x = (x + 1.5) % 5.0
}
print(x)
这很好用,并给出了正确的预期行为。
在此之后,我尝试将其放入我正在处理的库中。我创建了一个新的 .swift 文件,重建了库,确保 import 语句在我的 Playground 中正常工作(通过使用我库中的其他 functions/methods),我得到以下错误:
- 为运算符 找到不明确的运算符声明
- 无法将“()”类型的值转换为预期的参数类型'Double'
- 运算符不是已知的二元运算符
任何人都可以解释将它放在我的 Playground 中和将它包含在导入文件中的区别吗?
对于库,您只需声明具有 public 访问权限的函数。不需要 infix operator %
。您正在执行运算符重载。
public func % (left: Double, right: Double) -> Double {
return left.truncatingRemainder(dividingBy: right)
}
infix operator
在您使用自定义运算符时需要。喜欢infix operator **