Почему это сравнение строк дает этот результат в 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])