我正在努力寻求社区的建议,以制定最佳实践。请以以下示例与我联系:
假设您的工作 间隔 是 开放时间的一半 ,即 开始时就知道的东西。
例如
HalfOpenInterval
限制一天。示例:您说“从下午1:00开始”(直到一天结束)。我们称之为 ClockIntervalHalfOpenInterval
局限于宇宙的存在。示例:您说“从1810年7月9日起,我们宣布独立。”(假设直到宇宙末日。)我们称之为 时期对于这两种类型的实体:你与他们的集合,所以你通常slices
的 时钟 和 时间 在你的代码。
所以,现在问题来了: 你必须找到一个给定的时间间隔封闭 (func FindEnclosingHalfOpenInterval
)用于 这两个
时钟和时间,于是你开始写代码…
好吧,我开始讨论这件事……我应该如何组织代码以便只编写一次通用函数。(func FindEnclosingHalfOpenInterval
)。
所以我进入了这段代码:https :
//play.golang.org/p/Cy7fFaFzYJR
但是我一直在想是否有更好的方法来定义切片集合的常见行为。
请读者,您将意识到我需要对每种切片类型进行“逐元素” 转换
(并且对于每种我定义的具体HalfOpenInterval类型,我都有一种切片类型)。因此,我想知道是否有任何方法可以让我引入新的类型而HalfOpenInterval
无需进行一些调整,并且“自动”获得使用func FindEnclosingHalfOpenInterval
?的能力。也许我基于Rich-oo-
java的想法不是解决简单直接进入世界中问题的正确方法。我全都听到,有任何建议。
这里的关键问题是您需要将切片从一种类型转换为另一种类型。
正确的方法是创建一个新的切片并在其上循环以转换每个项目。如果您事先创建了数组,则可以更快地执行此操作:
func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals {
intervals := make(HalfOpenIntervals, 0, len(clockIntervals))
for _, clockInterval := range clockIntervals {
intervals = append(intervals, clockInterval)
}
return intervals
}
除了这种组合之外,您还可以解决GetEnclosingInterval
只编写一次函数的问题。我并不是说它更好:它还有其他优点和缺点。合适的方法取决于您在此处发布的内容之外还使用切片的方式。
这是我的重构建议(并已修正):https :
//play.golang.org/p/Ko43hJUMpyT(TehSṕhinX,您忘了使用而不是(或名称是)来创建
可变方法 )baseIntervals.add``pointer recievers``value recievers``non-pointer recievers
将HalfOpenIntervals
不存在了。取而代之的是,您有两种不同的类型CLockIntervals
,PeriodIntervals
并且都具有GetEnclosingInterval
通过通用基本结构实现的排序和功能。
为了方便起见,我为每个函数添加了Add
一个New...
函数。这就是缺点所在:由于CLockIntervals
(和PeriodIntervals
)不再是一个切片,而是一个结构,您将需要方便的功能来从外部处理内部切片。
-编辑-
我自己来自面向对象的背景,我知道不惜一切代价避免重复代码的动力。
现在,我已经全职编写了2年多的Go代码,我了解到,这并不总是go中最好的方法。这些天来,在不同类型的go中复制代码是我常做的事情。不过,不确定是否所有人都同意这一说法。
问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。
在我的应用程序中,有几个组件将生成各种不同类型的特定于应用程序的事件。这些事件将发布到代理并传递给N个客户端。其中一些客户端是我的服务器端应用程序中的其他Java类,但主要消费者是我的基于javascript的WebUI。 到目前为止,我目前的方法是定义一个抽象事件基类来封装一些公共字段,然后为每个事件实现一个特定的事件类。 这一直工作正常,只是现在我需要在javascript和java端维护事件
当我尝试在junit测试类中加载配置文件时,在注入数据源时出现以下错误: 组织。springframework。豆。工厂NoSuchBeanDefinitionException:在组织中未定义名为“transactionManager”的bean。springframework。豆。工厂支持DefaultListableBeanFactory。位于org的getBeanDefinition(De
我正在创建一个JSP. tag文件来处理这个用例: 其中,行为将是获取请求参数,转义其值以“安全”使用,并将转义值放回某个作用域(例如请求),与参数同名(尽管它可能是另一个名称)。 我有一个可以工作的实现,但我有scriptlet,因为我找不到在JSTL中使用变量名的方法。但我不是JSTL向导,所以我想看看我是否缺少语法/方法。这是正在工作的文件: (我真希望艾尔能自动逃脱。)
我正在开发一个java程序,它接受输入的分数,给出输入的总数和平均值,但是我很难计算出如何获得当前输入的最高分数“我使用了大量嵌套的else-if语句,但必须有一种简单的方法来实现这一点,而不是键入100个else-if语句这是我的代码。我在else-if语句开始的地方添加了一条注释,以确定最高级别
本文向大家介绍JavaScript的各种常见函数定义方法,包括了JavaScript的各种常见函数定义方法的使用技巧和注意事项,需要的朋友参考一下 本文详细讲述了JavaScript的各种常见函数定义方法,分享给大家供大家参考。具体分析如下: 首先看一下JavaScript最常见的四种函数定义: 用Function构造函数定义的函数,代码如下: 函数声明,这种方式也是最为常见的一种: 函数表达式,