为什么这个字符串比较会将结果赋予ruby?
k=[] path="E:/expr/amit.txt" name="amit" File.open("amit.txt").each do |l| k<< l end puts k[0] puts name.eql?("k[0]")
O / p amit
假
为什么o / p包含false?它应该给出真实
如果你不确定你的程序为什么不起作用, .inspect
就是你的朋友。
k=[] path="E:/expr/amit.txt" name="amit" File.open("amit.txt").each do |l| puts "Debugging: l is #{l.inspect}" k<< l end puts k[0] puts name.eql?("k[0]") puts "Debugging: name is #{name.inspect}, while k[0] is #{k[0].inspect}"
name
的值是“amit”。 您正在检查字符串"amit"
是否等于字符串"k[0]"
。 事实并非如此,所以你会变得虚假。
您可能要做的是name.eql?(k[0])
,它将检查值k[0]
是否为"amit"
。 然而,这仍然会返回false,因为k[0]
是“amit \ n”,而不是"amit"
。
要解决这个问题,你应该用k << l.chomp
而不是k << l
来删除尾随\n
。
在保存k
之前尝试做一个chomp
k=[] name="amit" File.foreach("file") do |line| k<
产量
$ cat file amit submit $ ruby test.rb ["amit"] true
你正在对字符串"k[0]"
测试字符串"amit"
"k[0]"
。 我想你可能想要puts name.eql?(k[0])