Ruby Attribution de chaînes True et False?
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
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 (
?:) auxif/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
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
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.