I.e. ¿Es posible hacer una var que no sea asignable desde fuera de la clase?¿Puedo hacer "público val" pero "var privado" en Scala en una línea?
Respuesta
En este momento, no, no hay forma de hacerlo.
que está limitado a la solución de tres líneas siguientes:
class Hider {
private[this] var xHidden: Int = 0
def x = xHidden
private def x_=(x0: Int) { xHidden = x0 }
}
Ahora la clase en sí es el único que puede manipular el campo subyacente xHidden
, mientras que otras instancias de la clase pueden utilizar el método setter y todos pueden ver el método getter.
Si no te importa utilizar nombres diferentes, puedes hacer que la var sea privada y olvidarte del setter (dos líneas).
No hay palabra clave "var to me, val to them".
Se podría hacer algo como:
class Test {
private var myprivatevar = ""
def publicvar = myprivatevar
}
de las otras clases, que sería capaz de utilizar solamente publicvar
y ya que no hay publicvar_=
método, no se puede asignar a la misma desde el exterior.
¿Quieres decir que no es posible hacerlo con un modificador? –
También en su solución tengo que encontrar diferentes nombres para var y def, ¿o no? –
No puede reutilizar el nombre (en mi caso, 'myprivatevar') ya que Scala crea implícitamente un (en este caso, privado) getter y setter para la variable; si intentas hacer un 'def myprivatevar = this.myprivatevar' obtendrías un choque de nombre ya que el método está definido dos veces. – andri
Ciertamente se convierte algo en var y luego se vuelve privado para la clase que define el campo.
scala> class Holder(private var someValue: String) {
| def getValueOfOther(other: Holder) = other.someValue
| def combinedWith(holder: Holder) = new Holder(holder1.someValue + " " + holder2.someValue)
| def value = someValue
| }
defined class Holder
scala> val holder1 = new Holder("foo")
holder1: Holder = [email protected]
scala> val holder2 = new Holder("bar")
holder2: Holder = [email protected]
scala> holder2.getValueOfOther(holder1)
res5: String = foo
scala> val holder3 = holder1 combinedWith holder2
holder3: Holder = [email protected]
scala> holder3.value
res6: String = foo bar
- 1. El uso de DEF, val, y var en Scala
- 2. ¿Cómo se define un var/val local en el constructor primario en Scala?
- 3. inicializar una var en scala
- 4. Scala: final estático público en una clase
- 5. Acceso público predeterminado en scala
- 6. Una visión pragmática en privado vs público
- 7. Privado o público MSMQ
- 8. ¿Puedo hacer que el constructor primario sea privado y mantener abiertos los constructores auxiliares en Scala?
- 9. Ejemplo de encabezado privado/público?
- 10. Privado vs público en Cache-Control
- 11. devolver un val perezoso en Scala
- 12. Puzzle - exposición de una sub-miembro público de miembro privado con el tipo de encargo
- 13. make azy var in scala
- 14. Clases abstractas, ¿por qué no podemos declarar val privado y miembro de la clase var?
- 15. Scala: ¿Puedo declarar un campo público que no generará getters y setters cuando se compile?
- 16. Debe anular la variable val en scala
- 17. Servidor de repositorio SVN público o privado?
- 18. ¿Hay alguna manera de que los argumentos sean var en lugar de val?
- 19. Cambiar automáticamente de público a privado (Java)
- 20. Scala: ¿Cómo "almacenar" una función en una var?
- 21. ¿Sobrescribe la var global en una línea en Python?
- 22. paquete modificador privado en Scala 2,8
- 23. Scala equivalente del ámbito público java
- 24. conjunto de Scala mutable e inmutable cuándo usar Val y var
- 25. Objective-C - Privado vs Protegido vs Público
- 26. ¿Cómo puedo hacer que un método sea privado en una interfaz?
- 27. JRE 1.6 en el repositorio de Maven (público o privado)
- 28. Scala: pase Seq a funciones var-args
- 29. C# anular miembro público y hacerlo privado
- 30. 7.toBinayString no funciona en Scala REPL, pero con val k = 7 funciona
¿Se discutió la posibilidad de tal palabra clave en la comunidad de Scala? –
@ Łukasz - No mientras he estado escuchando, no donde he estado escuchando. (No escucho en todas partes y no he estado aquí para siempre, sin embargo). Pero sospecho que no recibiría mucho favor, ya que hay un fuerte énfasis en mantener la definición de lenguaje pequeña (es decir, pocos casos especiales, incluso si los casos que tienes te dan un gran poder expresivo), y al favorecer las soluciones inmutables sobre las mutables. –