在scala中,我有以下代码:
def isDifferentGroup(artifact2: DefaultArtifact) = getArtifact(artifact1Id).getGroupId != artifact2.getGroupId
val artifacts = getArtifacts().filter(isSameGroup)
该函数isDifferentGroup
正在访问外部字符串变量artifactId
(闭包)。
我想避免计算getArtifact(artifactId)
列表中的每个项目。
我可以这样做:
val artifact1: DefaultArtifact = getArtifact(artifact1Id)
def isDifferentGroup(artifact2: DefaultArtifact) = artifact1.getGroupId != artifact2.getGroupId
val artifacts = getArtifacts().filter(isSameGroup)
但是,我们在函数artifact1
外部创建了一个变量isDifferentGroup
,这很难看,因为这个变量只在函数内部使用isDifferentGroup
。
如何解决?
一种可能性是按如下方式制作部分功能:
def isDifferentGroup(artifact1: DefaultArtifact)(artifact2: DefaultArtifact) = artifact1.getGroupId != artifact2.getGroupId
val artifacts = getArtifacts().filter(isDifferentGroup(getArtifact(artifact1Id)))
但是,我必须将代码getArtifact(artifactId)
移到isDifferentGroup
,我不希望这样。
如何解决?