【发布时间】:2018-01-01 06:50:36
【问题描述】:
我正在尝试创建一个具有平均功能的通用 Queue 类,但是我在这样做时遇到了麻烦,因为我需要一个协议以某种方式表明 T(Int) 是一个有效的操作。
这是我的尝试
class Queue<T:Numeric & Comparable> {
private var array:[T]
.....
func average() -> T {
return sum() / T(array.count)
}
}
但是由于明显的原因,编译器说我不能这样做,因为 T 不支持显式初始化。实现此行为的协议的名称是什么,或者我如何编写自己的代码?
【问题讨论】:
-
你不会真的想要这个,因为结果总是一个整数
-
您希望在队列中存储哪些类型?只有整数?还是浮点数?
-
那么为什么需要基于
array.count创建T呢?这对我来说没有意义。您希望除法转换为 T 类型吗?怎么可能?例如,除法的结果如何总是整数?为什么你需要平均值才能成为 T?如果average()总是返回浮点数还不够吗? -
@FyodorVolchyok T 完全有可能是支持从
Int(array.count) 初始化的类型。可以编写代码以始终返回Int平均值,尽管这会导致截断 -
@Alexander 我知道可以编写此代码。但这并不能使它更明智。而且我不明白您需要对某些 generic 数值数组进行四舍五入(以哪种方式?)平均值的情况。或者这种舍入应该在文档中明确定义或从方法名称中明显定义(例如)。
标签: swift