2013-05-01 2 views
1

몇 시간 동안 두 비트의 데이터를 비교하려고 시도해 본 적이 있습니다. 이것은 기본적으로 내가 작성한 것입니다얼랭 문자열 비교가 작동하지 않습니다.

..

find_client(Search, [Client|Client_list])-> 
    {Name,Socket} = Client, 
    io:fwrite("Name>~s<~n",[Name]), 
    io:fwrite("Search>~s<~n",[Search]), 
    case string:equal(Name,Search) of 
     true-> 
     do_something; 
     false-> 
     do_something_else 
    end; 
find_client(Search,[])-> 
    not_found. 

문제는 항상 내가 확신하는 경우에도 그들이 동일해야 do_something_else 돌려 주어집니다! IO :에 fwrite 인쇄 밖으로 내 테스트에서 콘솔에 정확히 같은 일이, 내가 문자열을 시도하기 전에

Name>name1< 
Search>name1< 

ie- : 나는 내 자신의 패턴 일치을하려고했지만 상관없이 조합이 나는 것 같지 수와 동일 그것을 작동 시키려면.

내가 누락 된 항목이 있습니까? 나는 정말 신선한 눈빛의 핏빛이나 시도 할 또 다른 방법에 대한 제안을 고맙게 생각한다.

답변

8

~ s는 iolists (및 원자!)를 같은 방식으로 포맷하기 때문에 동일한 것을 인쇄합니다.

io:fwrite("~s~n", ["name"]), 
io:fwrite("~s~n", [<<"name">>]), 
io:fwrite("~s~n", [name]), 
io:fwrite("~s~n", [[$n, $a, <<"m">>, "e"]]). 

더 나은 "이것은 무엇입니까?" 디버그 기술은 ~ p 형식 ​​문자열을 사용하는 것입니다. 위의 예를 사용해보십시오.

의 구현은 실제로 =:= 연산자 (패턴 일치)와 다르지 않으므로 다른 구조를 가진 동일한 iolists에 대해서는 true를 반환하지 않습니다.

아마 할 일은 iolists를 비교할 수있는 비교 함수를 작성하는 것입니다.이 함수는 보통 iolist_to_binary/1을 사용하여 수행됩니다.

iolist_equal(A, B) -> 
    iolist_to_binary(A) =:= iolist_to_binary(B). 
+1

당신은 내 영웅입니다! – Holly

관련 문제