Представьте себе следующую Java Class:Scala область применения, инициализация
class Test
{
private Button b;
private Table t;
public Test()
{
setupButton();
setupTable();
}
private void setupButton()
{
b = ...
b.doAwesomeStuff();
// ... more stuff going on
}
private void setupTable()
{
t = ...
t.attach(b); // Works, because b is in (class) scope
}
}
Тот же самый код в Scala:
class Test()
{
setupButton();
setupTable();
private def setupButton(): Unit =
{
val button: Button = ...
}
private def setupTable(): Unit =
{
val table: Table = ...
table.attach(button) // <--- error, because button is not in scope, obviously
}
}
Теперь, конечно, есть решения этого.
One Being "Использование вары":
class Test
{
private var b: Button = _
private var t: Table = _
// ... Rest works now, because b and t are in scope, but they are vars, which is not necessary
}
Еще один является "положить все в одном методе", поэтому в основном сливаются setupButton() и setupTable(). Это ного, если материал, который происходит в этих методах, немного сложнее.
Еще один должен был бы дать методов такие параметры, как:
private void setupTable(b: Button) {...}
Все предложенные мои решения, кажется неуместным, первый почти всегда (зачем использовать вар, если вам нужен только Вэл?) И вторых, в большинстве случаев. Третий приводит к ненужному коду, который только что существует, поэтому мы попадаем в область видимости, в которой мы нуждаемся.
Я уверен, что могу предложить несколько других решений, но я спрашиваю вас: что бы вы сделали в таком случае?
Это хорошо работает, если вы делаете только одну кнопку. Но если у меня есть метод под названием «setupTableS()» (см. Множественное число), тогда мне нужно будет сделать это для каждой таблицы? (Было бы одинаково без вспомогательных методов) – Sorona
@Teolha, если вы не можете отделить настройку компонентов, вы можете использовать способ настройки, например: val (table1, table2) = setupTables() 'например. –