Почему это сравнение строк дает такой результат в ruby? - PullRequest
0 голосов
/ 15 октября 2010
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

false

почему o / p содержит false ?? это должно давать true

Ответы [ 4 ]

3 голосов
/ 15 октября 2010

Значение 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 голос
/ 18 октября 2010

Если вы не уверены, почему ваша программа не работает, .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}"
1 голос
/ 15 октября 2010

Попробуйте сделать 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
0 голосов
/ 15 октября 2010

Вы проверяете строку "amit" против строки "k[0]".Я думаю, что вы, вероятно, хотите puts name.eql?(k[0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...