몇 문장으로 된 Rust 매크로

콘텐츠 표(목록?)


  • 청구자 및 면책 조항
  • 이 문서의 내용
  • 이 문서에서 다루지 않는 내용

  • 가자 (기사의 실제 내용)
  • 그런데... (매크로 유형)
  • 선언적 매크로
  • 절차적 매크로

  • 매크로는 어디에서 볼 수 있습니까?
  • 감사합니다
  • 최고의 포함

  • 자, 여러분은 며칠 동안 Rust를 작성했습니다. 또는 몇 주 또는 몇 달 또는 몇 년 또는 수십 년. 하지만! 당신은 매크로를 들었고 그것이 무엇인지 알기 위해 불타고 있습니다.

    청구인 및 면책 조항



    이 기사의 내용



    몇 가지 참조로 Rust에 있는 매크로가 무엇인지 설명합니다.

    이 기사가 다루지 않는 내용



    다음을 수행하지 않습니다.
  • 매크로를 만드는 방법 또는 매크로를 사용하는 방법을 알려줍니다
  • .
  • 매크로
  • 사용을 포함하여 행복한 Rust 세계로 안내합니다.
  • 매크로의 표현 코드 예제를 포함합니다
  • .

    갑시다



    매크로는 다른 코드를 작성하는 코드를 작성할 수 있게 해주는 Rust의 기능(가장 강력하지는 않더라도)일 뿐입니다. 내가 의미하는 바를 보여 드리겠습니다.

    따라서 식, 할당 또는 문에서 호출될 때 작업이 수행되기 전에 "Hello world"를 인쇄하도록 하는 코드를 작성하고 싶다고 가정해 보겠습니다. 표현식, 할당 또는 명령문 내의 안전한 위치에 "Hello world"행을 삽입하는 특수 함수를 작성할 수 있습니다. 의사 코드의 코드 예제(왜? Rust의 실제 코드를 설명하는 데 시간이 오래 걸리고 고지 사항 섹션을 읽으셨을 것이라고 확신합니다):

    # define a macro
    macro_rules hello_world (thing: expression, assignment or statement) -> Valid_Code {
        var final_code = Valid_Code();
        final_code.append('print("Hello, World!")');
        final_code.append(thing);
        return final_code.to_valid_code();
    }
    


    그런 다음 다음과 같이 매크로를 사용할 수 있습니다.

    hello_world!(
        add(4, 8)
    )
    


    그러면 "Hello, World!"가 인쇄됩니다. 코드를 실행하기 전에.

    당신은 개념을 이해합니까?

    이제 눈이 꽤 좋으면 "hello_world 뒤의 느낌표가 익숙합니다. println!를 사용하여 콘텐츠를 stdout으로 파이프하는 데 사용했기 때문입니다."예, println!가 매크로이기 때문입니다...

    하지만...



    실제로 두 가지 유형의 매크로가 표시됩니다.

    선언적 매크로



    이 매크로는 패턴과 일치하고 드롭한 코드를 다른 코드로 대체하는 경향이 있습니다. 이 매크로의 예는 vec! 매크로입니다.

    절차적 매크로



    이러한 매크로(세 가지 유형이 있음)는 더 마술적이고 일부 코드를 입력으로 받아들이고 해당 코드에서 작동하며 출력으로 일부 코드를 생성하는 경향이 있습니다(Rust 책에서 인용). 그것들은 #[derive()] 또는 Actix 프레임워크를 사용할 때 사용하는 #[tokio::main]와 같은 구조체에 부과하는 것입니다.

    The Secrets of the Immortal(지금 읽고 있는 아주 좋은 책)에 나오는 마법사 아브라함처럼 여러분의 상상력이 무궁무진하기를 바라면 매크로를 사용할 수 있는 무한한 방법을 보게 될 것입니다.

    문자 그대로 구조체에 모든 기능을 추가하고 구조체, 속성 등에 메서드를 추가할 수 있습니다.
    Graydon's소년들이 우리에게 Rustaceansvector = vec![1, 2, 3, 4]에게 다음 대신 사용하도록 준 것처럼 기능을 사용하면 사람들이 작업을 더 쉽게 할 수 있습니다.

    let vector = Vec::new();
    vector.push(1);
    vector.push(2);
    vector.push(3);
    vector.push(4);
    


    매크로는 어디서 볼 수 있나요?



    그들은 어디에나 있습니다. 해당 #[derive()] 구문에서 실제 디버거 대신 사용하는 경향이 있는 println!를 볼 수 있습니다. Rust Book은 매크로에 대해 설명하고more extensively 해당 책을 읽으면 매크로를 더 많이 사용하고 생성하는 방법을 배울 수 있습니다.
    The Little Book of Rust Macros을 읽어서 매크로에 자신을 똥칠할 수도 있습니다.

    고맙습니다



    이 글을 잘생기고 예쁜 친구들에게 좋아요를 누르고 공유하면 됩니다.

    최고의 포용성



    네, "'잘생겼다', '예쁘다' 같은 말로 친구를 정의한다고 생각하는 대담함"을 압니다. 거기에서 compliment_someone! 매크로를 사용하고 싶었지만 이해하려면 제가 올린 링크를 읽어야 합니다.

    산쿄 :fire

    좋은 웹페이지 즐겨찾기