为什么这个字符串比较会将结果赋予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])