Pull to refresh

Comments 8

В статье, для краткости, я буду в основном использовать термин приватная переменная.

Хороший термин приватный член класса (private class member).
Занятно. Неоднократно сам задумывался о том, что было бы полезно иметь такое в Java. вот, оказывается, в Scala реализовали.

А еще было бы клево, если бы можно было написать что-нибудь типа private[my.package.*], чтобы все подпакеты данного пакета имели доступ. Это здорово было бы для создания «односторонних» отношений типа friendship. Иногда очень не хватает такого…
Так в Scala есть такой функционал. В статье про него мельком сказано. Можно писать так:
private[my.package] val a = 5
И все, что внутри пакета my.package, будет видеть это приватное свойство. В том числе и вложенные пакеты, типа my.package.inside.
Я имел в виду всё, что внутри пакетов, находящихся внутри пакета mypackage. То есть в пакетах mypackage.pack1 и mypackage.pack2
В скале, в отличии от джавы, подпакет находится внутри пакета. Так что ваше желание автоматически исполнено.
подпакет находится внутри пакета

Правильно ли я понимаю, что класс в подпакете, обозначенный «default» будет виден из внешних пакетов?
Если честно, то не понял вопрос. Что значит «обозначенный «default»»? Если речь про дефолтный модификатор доступа (т.е. если его не указывать вообще), то это просто public.
Вот (импорты опущены):

package root

private object R {
    println(C1)
    println(C2) //нельзя
}


package root.c1

private[root] object C1 {
    println(R)
    println(C2) //нельзя
}


package root.c2

private object C2 {
    println(R)
    println(C1)
}

Sign up to leave a comment.

Articles

Change theme settings