猿问

如何将排序接口实现类型作为函数参数传递?

我正在编写不同的调度算法,并想比较订购作业的各种方式。我在结构上有一个函数,我想传递排序接口类型的类型以供函数内的排序使用。


type Schedule struct {

    Jobs []Job

}


type ByDifference []Job

// ByDifference implements sort.Interface


type ByRatio []Job

// ByRatio implements sort.Interface


func (s *Schedule) Schedule(OrderBy sort.Interface) {

    // Summation variables omitted


    // This fails as there is no function OrderBy()

    sort.(OrderBy(q.Jobs))


    for _, v := range q.Jobs {

        // Compute weighted sum omitted

    }


    // Output code omitted


}

自然,我想调用 Schedule 函数并传递 ByDifference 或 ByRatio 的一些表示,并让排序使用该类型。我最初的阅读似乎导致了类型反射。是否可以使用这种设计来传递一种类型,该类型实现了要在函数内由 sort 使用的接口?


Smart猫小萌
浏览 208回答 1
1回答

呼啦一阵风

也许这样type Schedule struct {    Jobs []Job}const(Difference=iotaRatio=iota)type ByDifference Schedule// ByDifference implements sort.Interfacetype ByRatio Schedule// ByRatio implements sort.Interfacefunc (s *Schedule) Schedule(order int) { // s.Schedule(Difference) for example    // Summation variables omitted    switch order{        case Difference: ss:= ByDifference(*s);  sort(ss); s=&Schedule(ss)        case Ratio: ss:= ByRatio(*s);  sort(ss); s=&Schedule(ss)    }    for _, v := range s.Jobs {        // Compute weighted sum omitted    }    // Output code omitted}
随时随地看视频慕课网APP

相关分类

Go
我要回答