2017-10-31 4 views
2

실습으로 문자열에있는 문자의 첫 번째 인덱스를 반환하는 함수를 만들고 싶습니다. 이 함수는 두 개의 인수 인 문자열과 문자를 사용하여의 인덱스를 가져옵니다. 문자열을 반복하여 제공된 문자와 비교합니다. 테스트를 위해 각 반복의 평가를 인쇄하고 있지만 평등해야한다고하더라도 false를 반환합니다.Crystal에서 왜 이것을 false로 평가합니까?

def index_of?(obj, el) 
    unless obj.size == 0 
    num = 0 
    while num < obj.size 
     puts "#{obj[num]} == #{el} : #{obj[num] == el}" 
     num += 1 
    end 
    end 
end 

str = "hello" 
index_of?(str, "h") 

이 인쇄 :

h == h : false 
e == h : false 
l == h : false 
l == h : false 
o == h : false 
+0

순회 각 문자를 통해 계산 지수 문자열은 나쁜 성능을 가지고 있으며, 실제로 권장되지 않습니다. 대신에'Char :: Reader'를 반복해야합니다 :'obj.each_char_with_index {| char, i | char == el}'이면 i를 반환합니다. –

답변

7

obj[num] 때문에 리턴한다 Char 아닌 문자열.

인쇄됩니다 index_of?(str, 'h')을 수행 :

h == h : true 
e == h : false 
l == h : false 
l == h : false 
o == h : false