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?

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top