我正在尝试将特殊符号( {W} {B} {U} 等)转换为各自的颜色,所以我写了一个案例,但我在想一个案例不是什么我需要它,因为它一找到匹配就结束了。
print 'Test a Color'
color = gets.chomp
case color
when '{W}'
puts 'White'
when '{R}'
puts 'Red'
when '{G}'
puts 'Green'
when '{U}'
puts 'Blue'
when '{B}'
puts 'Black'
end
{B} 让我黑色, {U} 获取 Blue 。 {U} {B} 崩溃它/什么都不返回。 我怎么会让它继续下去呢?
答案 0 :(得分:7)
检查以下内容。
print "Test a Color"
color = gets.chomp
hash = {
'{W}' => 'White',
'{R}' => 'Red'
}
# finding by regex and replace with what you want.
puts color.gsub(/\{.+?\}/){|k| hash[k] || k }
答案 1 :(得分:2)
this.me = [{name: 'shameem', age: 18}]
答案 2 :(得分:2)
以下不是最有效或惯用的解决方案。但是,它通过对现有代码进行一些简单的改进,同时保留当前的语义来解决您的问题。
此解决方案读取标准输入并将其转换为存储在 colors 中的Array对象,然后循环遍历该数组中每个元素的case语句。
print "Test a Color: "
colors = gets.chomp.scan /\{[WRGUB]\}/
colors.each do |color|
case color
when "{W}"
puts "White"
when "{R}"
puts "Red"
when "{G}"
puts "Green"
when "{U}"
puts "Blue"
when "{B}"
puts "Black"
end
end
这将导致输出类似于以下内容:
$ ruby colors.rb
Test a Color: {W}{B}
White
Black
答案 3 :(得分:1)
虽然@xdazz的答案可以解决问题,但它并不是非常俗气的:
hash = %w|W R G U B|.map { |e| "{#{e}}"}
.zip(%w|White Red Green Blue Black|)
.to_h
print "Test a Color"
# color = gets.chomp
color = "Hello, {W}, I am {B}!"
puts color.gsub(Regexp.union(hash.keys), hash)
#⇒ Hello, White, I am Black!
我们在这里使用String#gsub(pattern, hash)
。