【问题标题】:When to use the generic parameter clause何时使用泛型参数子句
【发布时间】:2014-12-20 23:02:39
【问题描述】:

我是 swift 中的泛型新手,在阅读一些书籍时,我遇到了一些我不理解的东西。在泛型函数中,什么时候适合使用类型参数(函数名之后的右边)?什么时候不合适?

这是一个未使用的示例(仅签名;来自标准库):

func sorted(isOrderedBefore: (T, T) -> Bool) -> Array<T>

这是一个使用它的例子(摘自我正在阅读的一本书):

func emphasize<T>(inout array:[T], modification:(T) -> T) {
        for i in 0 ..< array.count {
            array[i] = modification(array[i])
        }
}

我阅读了 Apple 的 swift 语言参考部分:通用参数和参数。但我仍然不清楚。提前感谢您的任何见解。

【问题讨论】:

    标签: swift swift-playground generics swift-extensions


    【解决方案1】:

    在第一个示例中,泛型参数来自它所定义的类型。我相信它是在 Array 中声明的,它已经具有泛型类型T

    在第二个示例中,函数本身声明了泛型参数。如果我没记错的话,这个函数是一个全局函数。它尚未在定义通用 T 的范围内。

    在函数中声明一个新的泛型参数是不合适的,它会掩盖或试图替换已经在其作用域中声明的参数。例如,当扩展一个数组时,这是不合适的:

    extension Array {
        func myFunc<T>() {
        }
    }
    

    这里我们定义了一个新的T,它掩盖了已经在数组声明中声明的原始T

    在您需要泛型类型的所有其他情况下,您应该自己声明它。

    【讨论】:

    • 这是有道理的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多