Есть ли в Scala механизм наследования локальных переменных метода? - PullRequest
1 голос
/ 10 октября 2011

Например, предположим, у меня есть

class Parent {

    def method() {
        var myvar = "test"
    }

} 

Есть ли какой-нибудь механизм доступа к myvar в дочерних классах?

Edit:

Я пытаюсь создать DSL по образцу существующего языка. Этот язык имеет такие особенности, как

onTrade {
    if (price == ...) // will compile
}

onDayStart {
    if (price == ...) // will not compile
}

Как будто цена является глобальной переменной, но существуют проверки времени компиляции, чтобы убедиться, что она используется только в правильном контексте. Я думал, что один из способов имитировать это будет иметь локальные переменные, которые могут быть переопределены в подклассах. Что-то вроде

// Parent
onTrade {
    var price = ...
}

// Child
onTrade {
    if (price == ...)
    if (somethingelse == ...) // will not compile
}

Ответы [ 2 ]

9 голосов
/ 10 октября 2011

Не совсем. Это простор для тебя. Если вы хотите, чтобы он был виден на разных уровнях, вам, вероятно, следует изменить область действия самой переменной.

Например, если вы хотите определить его на уровне класса, вы можете поделиться им таким образом. Локальные переменные не были бы локальными, если бы они на самом деле не были локальными.

Области являются вложенными, от самых широких до самых локальных. Глава 2, стр. 16 Справочника по языку Scala охватывает «Идентификаторы, имена и области действия», что объясняет это более технически подробно.

3 голосов
/ 10 октября 2011

Возможное решение вашей проблемы (хотя я не вижу способа избавиться от new):

// parent
var onTrades = List[OnTrade]()
class OnTrade {
  var price = ...
  ...
  onTrades = this :: onTrades
}

// child
new OnTrade {
  if (price == ...) {...} // subclass constructor, will call OnTrade constructor first
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...