运算符重载
Swift 4.1,Xcode 9.3
我想用Swift做一个二次方程函数。
在处理这个问题时,我发现我需要重载一些操作符,这样我就可以处理元组和其他数字(
Double
在这种情况下),这是因为我需要使用我的自定义
±
操作人员尽管我只处理类型的值
双重的
在我的二次函数中,我决定使用泛型使重载操作符更灵活,以备将来使用。
但由于一个我不理解的原因,我收到了关于超载声明的错误
/
操作人员
风俗
±
操作员-工作
infix operator ± : AdditionPrecedence
public func ± <T: Numeric>(left: T, right: T) -> (T, T) {
return (left + right, left - right)
}
二次函数-工作
func quadratic(a: Double, b: Double, c: Double) -> (Double, Double) {
return (-b ± sqrt((b * b) - (4 * a * c))) / (2 * a)
}
重载运算符-部分工作¹
//Binary operator '/' cannot be applied to two 'T' operands
func / <T: Numeric>(lhs: (T, T), rhs: T) -> (T, T) {
return (lhs.0 / rhs, lhs.1 / rhs)
}
func * <T: Numeric>(lhs: (T, T), rhs: T) -> (T, T) {
return (lhs.0 * rhs, lhs.1 * rhs)
}
func - <T: Numeric>(lhs: (T, T), rhs: T) -> (T, T) {
return (lhs.0 - rhs, lhs.1 - rhs)
}
func + <T: Numeric>(lhs: (T, T), rhs: T) -> (T, T) {
return (lhs.0 + rhs, lhs.1 + rhs)
}
//Binary operator '/' cannot be applied to two 'T' operands
func / <T: Numeric>(lhs: T, rhs: (T, T)) -> (T, T) {
return (lhs / rhs.0, lhs / rhs.1)
}
func * <T: Numeric>(lhs: T, rhs: (T, T)) -> (T, T) {
return (lhs * rhs.0, lhs * rhs.1)
}
func - <T: Numeric>(lhs: T, rhs: (T, T)) -> (T, T) {
return (lhs - rhs.0, lhs - rhs.1)
}
func + <T: Numeric>(lhs: T, rhs: (T, T)) -> (T, T) {
return (lhs + rhs.0, lhs + rhs.1)
}
1.
我只收到以下错误
/
运算符,而不是任何其他重载运算符(
+
,则,
-
或
*
)。
带错误的重载运算符(
/
s) -不工作
//Binary operator '/' cannot be applied to two 'T' operands
func / <T: Numeric>(lhs: (T, T), rhs: T) -> (T, T) {
return (lhs.0 / rhs, lhs.1 / rhs)
}
//Binary operator '/' cannot be applied to two 'T' operands
func / <T: Numeric>(lhs: T, rhs: (T, T)) -> (T, T) {
return (lhs / rhs.0, lhs / rhs.1)
}
假设:
我认为我使用运算符
/
在重载的声明内
/
运算符本身(尽管它正在不同的上下文中使用)会导致错误。
最后一个问题:
如何在保持重载运算符灵活性的同时解决错误?
如果可以(我想我可能必须返回
String
为了实现这一点),我还想制作一个单独的二次函数,它可以返回
准确的
解决方案
奖金问题2:
还有,如果有人知道如何制作一个单独的函数来解决
立方体的