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

时间:2015-03-22 15:41:51

标签: go

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

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?

1 个答案:

答案 0 :(得分:2)

也许这样

type Schedule struct {
    Jobs []Job
}
const(
Difference=iota
Ratio=iota
)
type ByDifference Schedule
// ByDifference implements sort.Interface

type ByRatio Schedule
// ByRatio implements sort.Interface

func (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

}