Почему это сравнение строк дает этот результат в 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]")
О/р
amit
ложно
почему o/p, содержащий false?, он должен дать true
Ответ 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}"
Ответ 2
Значение name равно "amit". Вы проверяете, равна ли строка "amit" строке "k[0]". Это не так, поэтому вы ошибаетесь.
То, что вы, вероятно, хотели сделать, это name.eql?(k[0]), который будет проверять, является ли значение k[0]"amit". Однако это все равно вернет false, потому что k[0] является "amit\n", а не "amit".
Чтобы исправить это, вы должны сделать k << l.chomp вместо k << l, чтобы удалить завершающий \n.
Ответ 3
Попробуйте сделать chomp, прежде чем сохранять 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
Ответ 4
Вы тестируете строку "amit" по строке "k[0]". Я думаю, вы, вероятно, хотите puts name.eql?(k[0])