Solamente debe incluir =
:
private def createDomNode(tag: String, attrs: Map[String , String]): DomNode = {
// ...
}
Si no va a poner =
entre firma del método y el cuerpo, y luego volver tipo es Unit
, por lo que este:
def m(i: Int) {}
es lo mismo que
def m(i: Int): Unit = {}
Respuesta al comentario: Lo que describí anteriormente es en realidad el método, si lo define en object
, class
o trait
definición. sintaxis de la función se vería así:
val createDomNode: (String, Map[String , String]) => DomNode = { (tag, attrs) =>
// ...
}
Como se puede ver que definen val
con el nombre createDomNode
del tipo de función. También se puede escribir como:
val createDomNode: Function2[String, Map[String , String], DomNode] = { (tag, attrs) =>
// ...
}
aquí hay otro ejemplo. En este caso defino método que genera nueva función cada vez que la llame:
def createDomNode = (tag: String, attrs: Map[String , String]) => new DomNode
Pero es importante entender, que el método devuelve una "función que devuelve DomNode
" en este caso, pero no DomNode
sí.
acerca de la programación en referencia Scala. Creo que está hablando de Capítulo 2 - Paso 3 (en la introducción)
Como puede ver, la función max
se define en REPL, y en realidad es una función. En realidad también se puede escribir algo como esto:
class MyClass {
def myMethod(i: Int): Int = {
def myInnerFn(x: Int) = x * x
myInnerFn(i)
}
}
En este caso es myMethod
método y myInnerFn
es función. Como puede ver, depende mucho del contexto.Creo que esta sintaxis para myInnerFn
es simplemente azúcar sintáctica para (tengo que mirar dentro de las especificaciones con el fin de decir con seguridad):
val myInnerFn = (x: Int) => x * x
Lo mismo sucede en REPL. Y por cierto que es porque escribí al comienzo:
si se define dentro de object
, class
o trait
definición
Lo siento, tienen que ser más claro acerca de esto y lo describen en más detalle en mi segunda actualización.
Miré en la especificación de Scala. Parece que no estoy totalmente en lo cierto cuando digo que myInnerFn
es azúcar sintáctico para la función. pero parece que se llama Método Tipo. Lo puede encontrar en la sección de especificaciones Tipo 3.3.1 Método:
http://www.scala-lang.org/docu/files/ScalaReference.pdf
esperamos que le permita dar alguna pista, si quieres profundizar más en esto. Creo que es fácil perderse en la terminología. Puede function
en 2 contextos. En primer lugar tenemos
- Función - devuelve algún valor
- Procedimiento - no devuelve nada (o en el contexto Scala se devuelve
Unit
)
Y en segundo contexto:
- Función - pieza de código ejecutable que puede ser pasa alrededor y se trata como valor
- Método - pertenece a la clase
y que a veces no está claro en qué contexto que significaba. Por ejemplo, yo puedo decir que es myMethod
como función simplemente porque tiene un valor de retorno (o en otras palabras: myMethod
no es procedimiento). Creo que es el mismo caso en el libro.
Una cosa más. Secciones 8.1, 8.2, 8.3 de Programación en Scala pueden ayudar a entender esta terminología. Y si no me equivoco en mis suposiciones, lo que usted piensa que se llama Function
First-class function
en el libro (se describe en la sección 8.3).
Espero que esto ayude
REPL significa 'read-eval-print loop', un shell interactivo. Puede iniciar Scala REPL ejecutando el programa de línea de comando 'scala'. – kassens
Esto podría ayudar con el método frente a la confusión función: http://stackoverflow.com/questions/3926047/debunking-scala-myths/4812176#4812176. –
No mezcle las preguntas juntas, que solo están conectadas aleatoriamente (REPL, función/método, primera pregunta). –