Статические внутренние классы в scala

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

HTML

event.date = {{event.date}}
event.time = {{event.time}}
event.date = {{event.date}}
event.time = {{event.time}}

event.date:
event.time:

JS

    function Parent($scope) {
       $scope.event = {
        date: '2014/01/1',
        time: '10:01 AM'
       }
    }

    function Child($scope) {

    }

36
задан oxbow_lakes 1 July 2009 в 17:20
поделиться

5 ответов

Вы можете сделать что-то подобное, если вам не нужен доступ к внешнему классу во внутреннем классе (чего бы у вас не было в Java, учитывая, что ваш внутренний класс был объявлен static ):

object A{
    class B {
        val x = 3
    }
}
class A {
    // implementation of class here
}
println(new A.B().x)
37
ответ дан 27 November 2019 в 05:47
поделиться

Как указывали другие, «статические» классы должны размещаться внутри сопутствующего объекта.

В Scala классы, черты и объекты, которые являются членами класса, зависят от пути . Например:

class Button {
  class Click
}


val ok = new Button
val cancel = new Button

val c1 = new ok.Click
val c2 = new cancel.Click

Теперь c1 и c2 являются экземплярами -разных-классов. Один класс - ok.Click, а другой - cancel.Click. Если вы хотите указать тип всех классов Click, вы можете сказать Button # Click.

25
ответ дан 27 November 2019 в 05:47
поделиться

Из scala-lang :

нет понятия статических членов в Scala. Вместо этого Scala обрабатывает статические члены класса Y как члены одноэлементного объекта Y

Таким образом, кажется, что вы можете определить класс внутри объекта, но не статический класс, определенный внутри класса.

6
ответ дан 27 November 2019 в 05:47
поделиться

Не уверен, что я полностью понял ваш вариант использования ... Если это может вам помочь, объекты внутри классов видны как поля экземпляра, например

case class C(var x: Int)
class A { case object b extends C(0) }
val a = new A
println(a.b.x)
a.b.x = 2
println(a.b.x)

Более того, вы можете полностью переопределить родительский val с объектом:

case class C(var x: Int)
class A { val y: C = C(0) }
class B extends A { override case object y extends C(2) }
val a: A = new B
println(a.y.x)
1
ответ дан 27 November 2019 в 05:47
поделиться

В scala, если вам нужно создать несколько статических методов, вы можете использовать сопутствующий объект с тем же именем класса, где вы храните все псевдостатические методы. Пример:

class A {
}

object A {
    def xpto // define some pseudo static methods here..
}

Тогда вы можете просто использовать A.xpto .
Попробуйте узнать больше о дополнительных модулях на scala

1
ответ дан 27 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: