玩一些 Scala,似乎你不能从一个函数中提前返回。
我发现带有早期返回的扁平未缩进代码很容易遵循。我最初的尝试创建了一个大的嵌套结构。叫我挑剔,但我不喜欢看到以下内容:
}
}
}
在 Scala 中编写以下方法的最佳方法是什么?
是否有可能以减少嵌套的方式进行编程,或者我会一直与 Scala 的功能设计理念作斗争?
@Nullable
public static <T extends PsiElement> T getParentOfType(@Nullable PsiElement element,
@NotNull Class<T> aClass,
boolean strict,
@NotNull Class<? extends PsiElement>... stopAt) {
if (element == null) return null;
if (strict) {
element = element.getParent();
}
while (element != null && !aClass.isInstance(element)) {
if (instanceOf(element, stopAt)) return null;
if (element instanceof PsiFile) return null;
element = element.getParent();
}
//noinspection unchecked
return (T)element;
}
我的尝试:
def getParentOfType[T](element: PsiElement, aClass: Class, strict: Boolean): T[_ <: PsiElement] = {
element match {
case null => null
case _ => {
var el = if (strict) {
element.getParent
} else element
while(el != null) {
if (aClass isInstance el) {
return el
}
if (el.isInstanceOf[PsiFile]) return null;
el = el.getParent()
}
}
}
}
此外,在 Scala 世界中,什么是合适的论坛来询问“在 Scala 中编写 Java 方法 X 的最佳方法是什么?”。我发现自己经常问这个问题。