为什么这个字符串比较会将结果赋予ruby?

时间:2010-10-15 12:03:12

标签: 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?它应该给出真实的

4 个答案:

答案 0 :(得分:3)

name的值是“amit”。您正在检查字符串"amit"是否等于字符串"k[0]"。它不是,所以你会变得虚假。

您可能要做的是name.eql?(k[0]),它会检查值k[0]是否为"amit"。但是,这仍然会返回false,因为k[0]是“amit \ n”,而不是"amit"

要解决此问题,您应该k << l.chomp而不是k << l删除尾随的\n

答案 1 :(得分:1)

在保存k

之前尝试进行一次选择
k=[]
name="amit"
File.foreach("file") do  |line|
  k<<line.chomp
end
p k.grep(name)
puts name.eql?(k[0])

输出

$ cat file
amit
submit

$ ruby test.rb
["amit"]
true

答案 2 :(得分:1)

如果您不确定自己的计划无效,.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}"

答案 3 :(得分:0)

您正在针对字符串"amit"测试字符串"k[0]"。我想你可能想要puts name.eql?(k[0])