Scala convertions implícito: 2 vias para invocar
Pergunta
postou sobre o operador Java Elvis, e eu tentei algo em Scala para obter o mesmo efeito.
Eu apenas convertido tudo para um novo tipo estrutural com o operador ?:
tomar um objeto do mesmo tipo como argumento. Então diga:
implicit def toRockStar[B](v : B) = new {
def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example
Por name ?: "Lucas"
recebe "Lucas"
e name.?:{"Lucas"}
recebe Paulo
? O novo tipo estrutural deve retornar o valor inicial de qualquer coisa se ele não é nulo , ou seja, "Paulo"
no código acima.
Estou um pouco confuso. Qualquer explicação?
Solução
As suas extremidades operador em :
, o que significa que ele lê direita para a esquerda quando em notação infix. Por exemplo:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
Todos os métodos lidos da esquerda para a direita na notação de ponto, no entanto. Então, na verdade você está aplicando seu método para Lucas
na notação infix, e name
na notação de ponto.
A propósito, o operador Elvis era não aceites para inclusão em Java 7.
Outras dicas
Para o registro (encontrar esta discussão durante a pesquisa para trás o seguinte artigo ...), Daniel Spiewak (outro famoso Daniel no mundo Scala ...) postou um artigo sobre Elvis Operador de Implementação Groovy em Scala .