문자열 목록이나 그냥 문자열을 포함 할 수있는 변수가 있습니다. 내가 어떤 대우를하고 있는지 말할 수있는 좋은 방법이 있습니까?목록이 문자열인지 또는 문자열 목록인지 어떻게 확인할 수 있습니까?
"192.168.1.18" vs. ["192.168.1.18", "192.168.1.19"]
두 경우 모두 관련된 비트를 사용하고 싶습니다.
문자열 목록이나 그냥 문자열을 포함 할 수있는 변수가 있습니다. 내가 어떤 대우를하고 있는지 말할 수있는 좋은 방법이 있습니까?목록이 문자열인지 또는 문자열 목록인지 어떻게 확인할 수 있습니까?
"192.168.1.18" vs. ["192.168.1.18", "192.168.1.19"]
두 경우 모두 관련된 비트를 사용하고 싶습니다.
.
case MyVar of
[First|Rest] when is_list(First) -> ... First,Rest ...;
_ -> ... MyVar ...
end
또는 당신이 실제로 떨어져 당신이 할 수있는 문자열의 문자열/목록을 당기에 관심이없는 경우 : 당신이 비트에 관심이 경우
if is_list(hd(MyVar)) -> ... ;
true -> ...
end
내가 제대로 당신을 이해할 수 있나요? 문자열을 실제로 문자열로해야한다는 것을 실제로 확인하기 위해 어떤 코드도 넣지 않았습니다.이 코드는 이전에 수행 했어야합니다. 이 문자열/문자열 목록을 생성하여 항상 형식 중 하나로 넣을 수있는 방법이 있습니다.
는 가끔 뭔가를 쓰기 : 당신이 결과와 함께 할 계획, 또는 오히려 당신이 그것을 할 계획 어떻게 무엇에 많이 의존하는 방법 당신이
case X of
[List|_] when is_list(List) ->
list_of_lists;
List when is_list(List) ->
list;
_ ->
not_a_list
end
Erlang은 목록이 모듈 io_lib의 플랫 목록인지 테스트하는 다른 기능을 구현합니다.
당신의 particulary IP 문자열을 확인하기위한 하나 개의 좋은 선택 io_lib입니다 : latin1_char_list (기간) http://erlang.org/doc/man/io_lib.html#latin1_char_list-1
io_lib이 :/1 기능 구현이 latin1_char_list :
latin1_char_list([C|Cs]) when is_integer(C), C >= $\000, C =< $\377 ->
latin1_char_list(Cs);
latin1_char_list([]) -> true;
latin1_char_list(_) -> false.
당신이 평면 유니 코드를 테스트하려면 char_list (기간) http://erlang.org/doc/man/io_lib.html#char_list-1
io_lib : char_list/1 기능 구현이 io_lib을 사용할 수 있습니다리스트 is :
char_list([C|Cs]) when is_integer(C), C >= 0, C < 16#D800;
is_integer(C), C > 16#DFFF, C < 16#FFFE;
is_integer(C), C > 16#FFFF, C =< 16#10FFFF ->
char_list(Cs);
char_list([]) -> true;
char_list(_) -> false.
다른 유사한 기능에 대해서는 io_lib 모듈 설명서를 확인하십시오.
새로운 얼랑 기능은 현재 프로젝트 지원 얼랑 버전에서 누락 된 경우은 단순히 제공하는 구현 새로운 얼랑 버전을 복사하여 자신의 모듈로 추가 할 수 있음을 알 수 있습니다. 최신 erlang/lib/*/src 소스 코드를 검색하고 필요한 새로운 기능을 간단하게 얻으십시오.
이렇게하는 가장 좋은 방법은 이러한 상황을 피하는 것입니다. 예 : 요소가 하나라도있는 경우에도 요소 목록을 사용하십시오. 또는 튜플을 사용하여 문자열 대신 IP를 나타낼 수 있습니다. 모호성을 피할 수있는 방법은 언제나 있습니다 – gleber
gleber : 동의하지만, 지금은 불행하게도 그런 종류의 변화를 도입 할 수없는 레거시 코드를 다루고 있습니다. – Fylke