Я написал некоторый код в scala для разрешения относительных (файловых) путей, см. Код ниже. Я храню пути в виде списков строк, и когда я вычисляю относительный путь, я использую переменную изменяемого списка, в которой я храню измененные копии списка, над которым я работаю.
У меня есть ощущение, что это, вероятно, не самый лучший способ сделать это, или это так? Должен ли я использовать изменяемый список и манипулировать этим? Или я должен использовать только неизменяемые списки, никаких переменных и функциональную версию? Как должен быть написан метод «относительный»?
class PathInfo(e: List[String]) {
val elements=e;
def relative(s : String) :PathInfo= relative(PathInfo.fromString(s));
def relative(that : PathInfo) : PathInfo = {
var list : List[String]=List();
for (item <- elements) {
list = list :+ item;
}
for (item <- that.elements) {
item match {
case "." => ;
case ".." => list = list dropRight(1);
case other => list = list :+ other;
}
}
new PathInfo(list);
}
override def toString : String = {
elements.mkString("/");
}
}
object PathInfo {
def fromString(s : String) : PathInfo={
new PathInfo(List.fromString(s,'/'));
}
}