Scala - параметр метода mutable (var) ссылка

EDIT: Я продолжаю получать здесь голоса за. Просто для записи, я больше не думаю, что это важно. Мне не нужно это с тех пор, как я его опубликовал.

Я хотел бы сделать следующее в Scala ...

def save(srcPath: String, destPath: String) {
    if (!destPath.endsWith('/'))
        destPath += '/'
    // do something
}

... но я не могу, потому что destPath - это значение. Есть ли способ объявить destPath as var?

Примечание: есть похожие вопросы, но во всех из них OP просто хотел изменить массив.

Пожалуйста, не советуйте следующее:

Изменение входных параметров часто рассматривается как плохой стиль и делает это труднее рассуждать о коде.

Я думаю, что это справедливо в императивном программировании (Scala допускает и то, и другое, верно?), И добавление чего-то вроде tmpDestPath только добавит беспорядка.

РЕДАКТИРОВАТЬ: Не поймите неправильно. Я знаю, что строки не изменяемы, и мне не нужна ссылка на ссылку, потому что я не хочу изменять данные вызывающего. Я просто хочу изменить локальную ссылку на строку, которую мне дал вызывающий (например, orig + '/'). Я хочу изменить это значение только в рамках текущего метода. Послушайте, это совершенно справедливо в Java:

void printPlusOne(int i) {
    i++;
    System.out.println("i is: " + i);
    System.out.println("and now it's same: " + i);
}

Мне не нужно создавать новую переменную, и мне не нужно дважды вычислять i + 1.

40
задан woky 17 August 2016 в 18:24
поделиться