몇 문장으로 된 Rust 매크로
3529 단어 todayilearnedfunctionalrust
콘텐츠 표(목록?)
자, 여러분은 며칠 동안 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소년들이 우리에게 Rustaceans
vector = 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
Reference
이 문제에 관하여(몇 문장으로 된 Rust 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lordsarcastic/rust-macros-in-few-sentences-5fnb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)