div>>

/div>

Mehdi Farsi

div>Follow

22 de Julho, 2019 – 3 min ler

/div>

/div>>/div>

/div>

/div>

/div>

Neste artigo, vamos explorar os seguintes tópicos:

  • O .. operador
  • O … operador
  • intervalos e valores flutuantes

Feel pode ler gratuitamente o artigo Case statement behind the scene se não estiver familiarizado com o case declaração e a cláusula when.

Antes de começar

Estou entusiasmado por partilhar consigo o nosso mais recente projecto: Fun Facts about Ruby – Volume 1

Por favor sinta-se à vontade para espalhar a palavra e partilhar este post! 🙏

Obrigado pelo seu tempo!

Num case declaração o when cláusulas podem ter um intervalo como parâmetro

p>aqui, a declaração case toma como parâmetro um número inteiro.

Como a cláusula when toma um intervalo como parâmetro, então o operador Range#=== é invocado e verifica se o número inteiro está incluído no intervalo.

O operador .. na nossa gama assegura que os operandos esquerdo e direito estão incluídos na gama.

O segundo when a cláusula toma uma gama utilizando o operador … operator.

Isto significa que o operando direito não está incluído na gama.

Agora que estamos mais familiarizados com o when cláusula e intervalos, vamos decompor um caso de margem que encontrei utilizando flutuadores e intervalos.

Intervalo de valores flutuantes e a cláusula quando

Como vimos no exemplo acima, o operador … exclui o operando correcto do intervalo. Mas, e se eu quiser excluir o operando da esquerda?

Here, apenas o conteúdo do primeiro when cláusula que corresponde ao surface valor é processado – no nosso caso when 70..90 then :second_value.

Neste caso, o case declaração retorna :second_value.

Então o próximo when cláusula nunca é avaliada para um surface de 90.

Isto funciona bem para uma gama de inteiros.

Mas e se tivermos de lidar com uma gama de flutuadores?

Aqui, o retorno da declaração de caso as surface é estritamente superior a 130.0.

se reatribuímos surface = 130.0 então o nosso case declaração retorna :second_value – o mesmo que as gamas de números inteiros.

Nota que usamos o Float::INFINITY constante para terminar o nosso último intervalo.

Isto é equivalente a qualquer valor acima de 130.0.

Finalmente vamos ver a noção de intervalos infinitos – Esta noção foi introduzida em Ruby 2.6.0.

Na linha 6, a gama omite explicitamente o operando correcto.

p>Ruby interpreta isto como se segue: 130..Float::INFINITY

Isto permite-nos evitar chamar implicitamente o para terminar a nossa gama.

Então aqui, o valor de surface coincide com esta comparação e o case devolve a declaração :third_value.

Voilà!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *