
/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 scenese não estiver familiarizado com ocasedeclaração e a cláusulawhen.
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à!