Ruby Attribution de chaînes True et False?

Sep 02 2020

Pouvez-vous attribuer des chaînes à vrai et faux?

par exemple je commence par un hachage:

shopping_list = {
  "milk" => false,
  "eggs" => false,
  "jalapenos" => true
}

puts "Here is your Shopping List:"

shopping_list.each do |key, value|
  puts "#{key} - #{value}"
end

Je voulais que la sortie mette «acheté» pour trueet «non acheté» pour false.

Réponses

2 TimurShtatland Sep 02 2020 at 16:39

Utilisez un en ligne if ou un ternary if operator:

shopping_list = {
  "milk" => false,
  "eggs" => false,
  "jalapenos" => true
}

puts "Here is your Shopping List:"

shopping_list.each do |key, value|
  puts "#{key} - #{if value then 'purchased' else 'not purchased' end}"
  # or this:
  # puts "#{key} - #{value ? 'purchased' : 'not purchased'}"
end

Impressions:

Here is your Shopping List:
milk - not purchased
eggs - not purchased
jalapenos - purchased

Quel opérateur utiliser: opérateur ternaire ( ?:) ou if/then/else/end?

J'ai choisi ici if/then/else/end, mais j'ai listé les deux options comme acceptables. C'est une question de style que vous choisissez.

Certains utilisateurs de Stack Overflow Ruby préfèrent utiliser un fichier standard if ... then ... else ... end. C'est plus long, mais plus clair et plus idiomatique. Voir, par exemple, ces réponses:
https://stackoverflow.com/a/2175392/967621
https://stackoverflow.com/a/4253250/967621

Les autres utilisateurs de Stack Overflow préfèrent ?:, ce qui est plus concis et clair, si vous y êtes habitué. Notez également que The Ruby Style Guide est d'accord:

Préférez l'opérateur ternaire ( ?:) aux if/then/else/endconstructions. C'est plus courant et évidemment plus concis.

# bad
result = if some_condition then something else something_else end

# good
result = some_condition ? something : something_else
3 Spikie Sep 02 2020 at 16:37

Cela répond-il à votre question?

shopping_list.each do |key, value|
   puts "#{key} - #{purchased?(value)}"
end


def purchased?(boolean)
  boolean ? 'purchased' : 'not purchased' 
end
2 Stefan Sep 02 2020 at 16:43

Je voulais que la sortie mette «acheté» pour vrai et «non acheté» pour faux.

Vous commenceriez généralement par une ifexpression :

shopping_list.each do |key, value|
  if value
    puts "#{key} - purchased"
  else
    puts "#{key} - not purchased"
  end
end

Plus tard, vous pouvez essayer de supprimer les parties de code en double.


Pouvez-vous attribuer des chaînes à vrai et faux?

Cela ressemble à une cartographie. Vous pouvez utiliser un autre hachage:

states = {
  true => 'purchased',
  false => 'not purchased'
}

Et reportez-vous à ce hachage lors de l'impression de votre liste de courses:

shopping_list.each do |key, value|
  puts "#{key} - #{states[value]}"
end

Ici, states[value]récupère la valeur de sortie pour à valuepartir du stateshachage.