TL; DR:由于有意识的设计选择,命名参数是可选的.没有官方语言支持,有没有办法强制执行(并通知)所需的命名参数?
我发现在定义类时使用命名参数非常有用.以AbilityMMORPG 为例:
class Ability {
final name;
final effectDuration;
final recast; // wait time until next use
// ...
}
Run Code Online (Sandbox Code Playgroud)
effectDuration并且recast两者都携带相同类型的信息(即持续时间),并且可能由相同的数据类型表示.很容易混淆哪个数字去哪里.但是,它们对于对象的正确性都是至关重要的信息,因此在实例化期间它们不会丢失.
我可以通过try-catch打破程序来强制执行这些参数的要求,但这对于使用该类并且不知道的人来说听起来不是很有趣(缺少阅读文档并直观地理解类的内容)他们是必需的.
是否有办法强制执行某些命名参数的要求,同时管理通知呼叫者所述要求和/或帮助他们正确使用它?
我一直认为迭代搜索是在未排序列表中查找最大值的首选方法.
这个想法相当随机,但简而言之:我相信我可以在O(logn)时间内完成任务,n是输入数组的大小.
合并排序的方法:分而治之.
步骤1:将findMax()任务划分为两个子任务findMax(leftHalf)和findMax(rightHalf).这个部门应该及时完成O(logn).
第2步:合并两个最大候选人备份.该步骤中的每个层应该花费恒定的时间这是错的.每次比较都是在恒定时间内完成的,但是还有O(1),并且在前一步骤中存在O(logn)这样的层.所以它也应该及时完成O(1) * O(logn) = O(logn)(原谅滥用符号).2^j/2这样的比较(第j级的2 ^ j对候选者).
因此,整个任务应该及时完成O(logn).O(n)时间.
但是,当我尝试计时时,我会得到清晰反映线性O(n)运行时间的结果.
size = 100000000 max = 0 time = 556
size = 200000000 max = 0 time = 1087
size = 300000000 max = 0 time = 1648
size = 400000000 max = 0 time = 1990
size = 500000000 max = 0 time = 2190 …