因此,我正在尝试寻找一种方法来对用户输入的Donald Duck-ify语句进行处理(稍后再评价我)。
到目前为止,这是我的代码:
puts "Wanna get Donald Duck-ified?"
print "Type some text here:"
user_input = gets.chomp
if user_input.gsub!(/s/,"th").gsub!(/ce/,"th").gsub!(/ci/,"th").gsub!(/cy/,"th")
puts "Boop - there go your s's and soft c's!"
else
puts "Dang, you didn't have any s's or soft c's!"
end
puts "#{user_input}"
用我自己的一些输入(特别是“方圆凯撒圆”)对其进行测试后,我得到“未定义的方法'gsub!”。for nil:NilClass“作为错误。
gsub怎么样!未定义?如果代码单独运行,user_input.gsub!(/s/,"th")
并且没有任何其他方法,则可以正常工作。添加第二种方法后,else
代码将运行,并且仅替换“ s”。这四个和我都收到上面的错误。
是否有另一种方法可以用单个替换替换多个模式(如Ruby文档所命名)?我花了最后几个小时研究问题,但我仍然无法完全分辨出问题是什么。
Ruby的新手。鼓励和激励。提前谢谢了。
不要使用#gsub!
链式。(实际上,大多数代码根本不使用#gsub!
。)
[gsub!]在原位执行String#gsub的替换,如果没有执行替换,则返回str或nil。
切换到#gsub
不会产生副作用的代码(yay!),并始终返回一个字符串(yay!)-只需将结果与原始(未修改的)字符串进行比较即可。
另外,可以使用接受哈希值的gsub形式(从Ruby 1.9.something开始)。这有一个细微的差别,尽管替换的值在这里无关紧要,但替换的值本身不会被替换。
user_input.gsub(/s|ce|ci|cy/, { "s"=>"th", "ce"=>"th", "ci"=>"th", "cy"=>"th" })
# or since all are replaced with "th" (which I just noticed =^_^=) ..
user_input.gsub(/s|ce|ci|cy/, "th")
(我仍然建议不gsub!
要这样做,因为我发现字符串不安全会有副作用。但是,当与上面的非链接形式一起使用时,它可以可靠地工作。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句