在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,我不希望这样。
如何解决?