如何在Swift中编写泛型函数?

时间:2015-07-13 14:24:39

标签: swift generics

我试图在Swift中编写一般的argmin函数。这是我的代码:

func argmin<X, Y:Comparable, R:SequenceType, where X== R.Generator.Element>
    (f:(X)->Y, domain:R)->X{
       var gen = domain.generate()
       var best = gen.next()!
       var minval = f(best)
       while let this = gen.next() {
           let value = f(this)
           if value < minval {
               best = this
               minval = value
           }
    }
    return best
}

我收到错误消息&#34;预期标识符以命名通用参数&#34;当我尝试编译这个定义时。我不知道这是什么意思。听起来这是一个调用函数的错误,而不是定义它,但即便如此,我也不会理解它。

我刚刚开始学习Swift。你能解释一下这个消息吗? (顺便说一句,我知道如果用一个空序列调用,这个函数会爆炸。我还没有担心。)

1 个答案:

答案 0 :(得分:1)

您必须删除此逗号:

func argmin<X, Y:Comparable, R:SequenceType, where X== R.Generator.Element>
                                           ^

放置它,它告诉编译器有另一个通用参数。错误信息只是说 - 可能是一种神秘的方式,但一旦你知道,它就更明确了什么