수색…


비고

erlang의 모든 데이터 유형을 용어라고합니다. 모든 데이터 유형 을 의미하는 일반 이름입니다.

번호

Erlang에서 숫자는 정수 또는 부동 소수점 숫자입니다. Erlang은 정수 (bignum)에 대해 임의의 정밀도를 사용하므로이 값은 시스템의 메모리 크기에 의해서만 제한됩니다.

1> 11.
11
2> -44.
-44
3> 0.1.
0.1
4> 5.1e-3.
0.0051
5> 5.2e2.
520.0

숫자는 다양한 기반에서 사용될 수 있습니다.

1> 2#101.
5
2> 16#ffff.
65535

$ -prefix 표기법은 ASCII / 유니 코드 문자의 정수 값을 산출합니다.

3> $a.
97
4> $A.
65
5> $2.
50
6> $🤖.
129302

원자

원자는 이름 자체로만 식별되는 이름을 가진 객체입니다.

원자는 Erlang에서 원자 리터럴을 사용하여 정의됩니다.

  • 소문자로 시작하며 문자, 숫자, 밑줄 또는 @ 문자 만 포함 된 인용되지 않은 문자열 또는
  • 작은 따옴표 붙은 문자열

예제들

1> hello.
hello

2> hello_world.
hello_world

3> world_Hello@.
world_Hello@

4> '1234'.     
'1234'

5> '!@#$%% ä'.
'!@#$%% ä'

대부분의 Erlang 프로그램에서 사용되는 원자

거의 모든 얼랑 (Erlang) 프로그램에 나타나는 원자들이 있는데, 특히 표준 라이브러리에서 사용되기 때문입니다.

  • truefalse 는 각 부울 값을 나타내는 데 사용됩니다.
  • ok 는 대개 해당 효과에 대해서만 호출되거나 반환 값의 일부로 호출되는 함수의 반환 값으로 사용되며 두 경우 모두 성공적인 실행을 나타냅니다.
  • 같은 방식으로 error 는 상위 함수에서 조기 반환을 보증하지 않는 오류 조건을 나타 내기 위해 사용됩니다
  • undefined 는 일반적으로 지정되지 않은 값의 자리 표시 자로 사용됩니다.

태그로 사용

okerror 는 터플의 첫 번째 요소가 성공을 알리는 반면, 더 많은 요소는 실제 반환 값 또는 오류 조건을 포함하는 튜플의 일부로 자주 사용됩니다.

func(Input) ->
    case Input of
        magic_value ->
            {ok, got_it};
        _ ->
            {error, wrong_one}
    end.

{ok, _} = func(SomeValue).

저장

원자를 사용할 때 염두에 두어야 할 한 가지는 메모리에서 자신의 전역 테이블에 저장되고이 테이블은 가비지 수집되지 않으므로 특히 원자 이름에 영향을 줄 수있는 경우 동적으로 원자를 생성한다는 점입니다.

바이너리 및 비트 스트링

이진수는 부호없는 8 비트 바이트 시퀀스입니다.

1> <<1,2,3,255>>.
<<1,2,3,255>>
2> <<256,257,258>>.
<<0,1,2>>
3> <<"hello","world">>.
<<"helloworld">>

비트 스트링은 비트 단위의 길이가 반드시 8의 배수가 아닌 일반화 된 바이너리입니다.

1> <<1:1, 0:2, 1:1>>.
<<9:4>> % 4 bits bitstring

튜플

터플은 다른 얼랑 (Erlang) 용어의 고정 된 길이의 순서이다. 튜플의 각 요소는 모든 유형의 용어 (모든 데이터 유형)가 될 수 있습니다.

1> {1, 2, 3}.
{1,2,3}
2> {one, two, three}.
{one,two,three}
3> {mix, atom, 123, {<<1,2>>, [list]}}.
{mix,atom,123,{<<1,2>>,[list]}}

기울기

Erlang의 목록은 0 개 이상의 얼랭 (Erlang) 용어의 시퀀스이며, 단일 링크 된 목록으로 구현됩니다. 목록의 각 요소는 모든 유형의 용어 (모든 데이터 유형) 일 수 있습니다.

1> [1,2,3].
[1,2,3]
2> [wow,1,{a,b}].     
[wow,1,{a,b}]

목록 머리는 목록의 첫 번째 요소입니다.

목록의 꼬리는 목록의 나머지 부분입니다 (머리가 없음). 또한 목록입니다.
hd/1tl/1 하거나 [H|T] 와 대조하여 목록의 머리와 꼬리를 가져올 수 있습니다.

3> hd([1,2,3]).
1
4> tl([1,2,3]).
[2,3]
5> [H|T] = [1,2,3].
[1,2,3]
6> H.
1
7> T.
[2,3]

요소를리스트에 추가하기

8> [new | [1,2,3]].
[new,1,2,3]

리스트 연결하기

9> [concat,this] ++ [to,this].
[concat,this,to,this]

문자열

Erlang에서 문자열은 별도의 데이터 유형이 아니며 ASCII 또는 Unicode 코드 포인트를 나타내는 정수 목록 일뿐입니다.

> [97,98,99].
"abc"
> [97,98,99] =:= "abc".
true
> hd("ABC").
65

Erlang 쉘이리스트를 출력 할 때 실제로 쉘이 문자열인지를 추측합니다. shell:strings(false) 호출하여 해당 동작을 끌 수 있습니다.

> [8].
"\b"
> shell:strings(false).
true
> [8].
[8]

위의 예에서 정수 8은 백 스페이스에 대한 ASCII 제어 문자로 해석됩니다.이 제어 문자는 문자열에서 "유효한"문자로 간주됩니다.

프로세스 ID (Pid)

erlang의 각 프로세스는 <xxx> 형식의 프로세스 식별자 ( Pid )를 가지고 있습니다. x 는 자연수입니다. 아래는 Pid 의 예입니다.

<0.1252.0>

Pid 는 'bang'( ! )을 사용하여 프로세스에 메시지를 보내는 데 사용할 수 있으며 Pid 는 변수에 Pid 될 수 있으며 둘 다 아래에 표시됩니다.

MyProcessId = self().
MyProcessId ! {"Say Hello"}.

프로세스 생성에 대한 더 많은 정보와 일반적인 프로세스에 대해 자세히 알아보십시오.

재미

Erlang은 함수형 프로그래밍 언어입니다. 함수 프로그래밍 언어의 기능 중 하나는 데이터 (기능 객체)로서의 기능을 처리하는 것입니다.

  • 함수를 인수로 다른 함수에 전달하십시오.
  • 함수의 결과로 함수를 반환합니다.
  • 일부 데이터 구조에서 함수를 보류합니다.

Erlang에서 이러한 기능을 재미라고합니다. 재미는 익명의 기능입니다.

1> Fun = fun(X) -> X*X end.
#Fun<erl_eval.6.52032458>
2> Fun(5).
25

재미에는 몇 가지 조항이있을 수 있습니다.

3> AddOrMult = fun(add,X) -> X+X;
3>                (mul,X) -> X*X 
3> end.
#Fun<erl_eval.12.52032458>
4> AddOrMult(mul,5).
25
5> AddOrMult(add,5).
10

fun Module:Function/Arity 와 같은 모듈 함수를 fun Module:Function/Arity 로 사용할 수도 있습니다.
예를 들어, arity 1이있는 lists 모듈에서 max 함수를 사용 lists .

6> Max = fun lists:max/1.
#Fun<lists.max.1>
7> Max([1,3,5,9,2]). 
9

지도

지도는 (키, 값) 쌍으로 구성된 연관 배열 또는 사전입니다.

1> M0 = #{}.
#{}
2> M1 = #{ "name" => "john", "age" => "28" }.
#{"age" => "28","name" => "john"}
3> M2 = #{ a => {M0, M1} }.
#{a => {#{},#{"age" => "28","name" => "john"}}}

지도를 업데이트하려면 다음 단계를 따르세요.

1> M = #{ 1 => x }.
2> M#{ 1 => c }.
#{1 => c}
3> M.
#{1 => x}

기존 키만 업데이트하십시오.

1> M = #{ 1 => a, 2 => b}.
2> M#{ 1 := c, 2:= d }.
#{1 => c,2 => d}
3> M#{ 3 := c }.
** exception error: {badkey,3}

패턴 일치 :

1> M = #{ name => "john", age => 28 }.
2> #{ name := Name, age := Age } = M.
3> Name.
"john"
4> Age.
28

비트 구문 : 기본값

Erlang doc의 비트 구문에 대한 설명 :

4.4 기본값

[시작 생략 : << 3.14 >>는 법적 구문이 아닙니다.]

기본 크기는 유형에 따라 다릅니다. 정수의 경우 8입니다. float의 경우 64입니다. 바이너리의 경우 지정된 바이너리의 실제 크기입니다.

    1> Bin = << 17/integer, 3.2/float, <<97, 98, 99>>/binary >>. 
    <<17,64,9,153,153,153,153,153,154,97,98,99>>
      ^ |<-------------------------->|<------>|
      |            float=64           binary=24
  integer=8


    2> size(Bin). % Returns the number of bytes:
    12            % 8 bits + 64 bits + 3*8 bits = 96 bits => 96/8 = 12 bytes

매칭시, Size가없는 바이너리 세그먼트는 패턴 끝에 만 허용되고, 기본 Size는 매치의 오른쪽에있는 바이너리의 나머지입니다 :

25> Bin = <<97, 98, 99>>. 
<<"abc">>

26> << X/integer, Rest/binary >> = Bin. 
<<"abc">>

27> X. 
97

28> Rest. 
<<"bc">>

패턴에 2 진 유형이있는 다른 모든 세그먼트는 크기를 지정해야합니다.

12> Bin = <<97, 98, 99, 100>>.         
<<"abcd">>

13> << B:1/binary, X/integer, Rest/binary >> = Bin. %'unit' defaults to 8 for  
<<"abcd">>                    %binary type, total segment size is Size * unit  

14> B.
<<"a">>

15> X.
98

16> Rest.
<<"cd">>

17> << B2/binary, X2/integer, Rest2/binary >> = Bin. 
* 1: a binary field without size is only allowed at the end of a binary pattern


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow