Box<Fn() + Send + 'static>
은 녹이 무엇입니까?"Box <Fn() + Send + 'static>"은 녹이 란 의미는 무엇입니까?
고급 형식 장을 읽는 동안이 구문을 발견했습니다. Send
은 형질이지만 형 매개 변수로 형용사 (이 경우 'static
)의 수명이 +
인 것은 무엇을 의미합니까? Fn()
도 무엇입니까?
Box<Fn() + Send + 'static>
은 녹이 무엇입니까?"Box <Fn() + Send + 'static>"은 녹이 란 의미는 무엇입니까?
고급 형식 장을 읽는 동안이 구문을 발견했습니다. Send
은 형질이지만 형 매개 변수로 형용사 (이 경우 'static
)의 수명이 +
인 것은 무엇을 의미합니까? Fn()
도 무엇입니까?
하나 하나 분해 해 봅시다. 상자
Box<T>
T
을. 특성 개체는 포인터 뒤에 만 있기 때문에 여기에서 사용합니다.Fn() + Send + 'static
가 trait object 타입, Box<Fn() + Send + 'static>
에서개체. 앞으로는 혼동을 피하기 위해 written Box<dyn (Fn() + Send + 'static)>
이 될 것입니다.
인사이드 dyn
은 원래 유형에 대한 제한입니다. T: Fn() + Send + 'static
일 때 Box<T>
은 Box<Fn() + Send + 'static>
으로 강제 변환 될 수 있습니다. 따라서 원본 유형을 알 수는 없지만 Fn()
및 Send
및 은 'static
(유효 기간은)이라고 가정 할 수 있습니다.
Fn()
이
은Clone
또는 Default
처럼 특징이다. 그러나 특수한 구문의 설탕을 사용합니다.
Fn(A1, ..., An)
은 Fn<(A1, ..., An), Output=()>
의 구문 설탕입니다.Fn(A1, ..., An) -> R
은 Fn<(A1, ..., An), Output=R>
의 구문 설탕입니다.Fn
, FnMut
, FnOnce
및 FnBox
과 같은 특성에도 적용됩니다.그럼 Fn
은 무엇을 의미합니까? T: Fn(A1, ..., An) -> R
은 x: T
이 인수가 A1, ..., An
이고 반환 유형이 R
인 호출 가능 객체임을 의미합니다. 함수 포인터와 클로저를 예로들 수 있습니다.
Send
이 유형의 값은 스레드를 통해 전송 될 수 있다는 것을 의미한다. auto trait이기 때문에 can be specified as the second bounds은 dyn
유형 (특성 개체 유형)입니다.
'static
정확히 하나의 수명이을 결합해야합니다 사실, dyn
유형 (특성 개체 유형)를 구속. 그것은 생략 될 때 추측됩니다. 추론 규칙은 RFC 0192 및 RFC 1156에 설명되어 있습니다.기본적으로 다음과 같습니다 :
Box<Any>
은 Any: 'static
이므로 Box<Any + 'static>
입니다.&'a Fn()
은 &'a (Fn() + 'a)
입니다.'static
(기능 서명의 경우) 또는 익명의 수명 (기능 본문의 경우)으로 변경됩니다.f: Box<Fn() + Send + 'static>
스레드와를 통해 전송 될 수있다, (아무 인수 나 돌아올 수없는 값) 등의 폐쇄 등 (변경 동적 알 수없는 원본 유형)을 호출 값으로 소유 포인터입니다 프로그램 자체만큼 길다.
자세한 설명은 Masaki에게 감사드립니다. 하나의 화제가 아닌 질문 :'Box <&i32>'은'heap'에 포인터/참조를 할당하고'빌린 내용 (i32)'(가리키는 데이터)이 스택에있을 수 있다는 것을 의미합니까? ''b = 박스 ''를 쓰면,''i = 12 ''와''b ''가 100을 얻게 될 것입니다 ('let m = 100, b : Box= Box :: new (print32) '여기서'autorefs' – soupybionics