2016-07-13 1 views
0

나는 모듈을 mod1.rs 있습니다.다른 모듈의 구조체를 사용할 때 가져올 내용은 무엇입니까? 내가 <code>use mod1::Foo;</code>을 쓴</p> <pre><code>pub struct Foo; impl Foo {} impl Drop for Foo { fn drop(&mut self) {} } </code></pre> <p></strong> file2.rs <strong>에서 :

  1. 실제로 file2.rs 무엇일까요? struct Foo, impl Foo? impl Drop for Foo은 어떨까요? 내가 Foo에서 file2.rs에 대한 모든 특성을 얻을, 나는 fn my_func(foo: Foo)...를 작성하는 경우

  2. , 나는 여기에 무엇을해야합니까? Foostruct입니까, 아니면 여기의 특성 (impl Foo)입니까?

내가 녹 책과 설명서를 잘 읽어하지만, 그들은 단지 명시 적 사용을 설명하지 같은 이름 ( impl)와 trait과 무슨 언급. Rust 책은 특성을 명시 적으로 가져 오도록 지시합니다. 그렇다면 Dropuse mod1::Foo으로 가져 오지 않은 경우, 이것은 실제로 매우 나쁜 것입니다.

+1

[이것은 좋은 읽을 거리입니다] (https://doc.rust-lang.org/book/crates-and-modules.html). – squiguy

답변

4

file2.rs 에서 나는 use mod1::Foo;을 썼다.

실제로 무엇이 있습니까 file2.rs? struct Foo, impl Foo? impl Drop for Foo은 어떨까요?

당신이, 당신이 고유의 방법의 모든 구조체 또는 열거 같은 유형을 얻을 use 때, impl Foo에 정의 된 것. 또한 해당 유형의 공개 입력란에 액세스 할 수 있습니다.

내가 Foo에서 file2.rs에 대한 모든 특성을 얻을, 나는 fn my_func(foo: Foo) 작성하는 경우, 내가 여기에 무엇을해야합니까? 여기 Foo은 구조체 또는 특성 (impl Foo)입니까?

impl Foo는 특성 없습니다. trait Bar은 특성을 정의합니다. impl Bar for FooFoo 유형의 특성을 구현합니다. impl Foo고유의 메서드를 만듭니다; 이들은 형질과 관련이 없습니다.

나는 녹 노트와 매뉴얼을 읽었지만, 명시 적 사용법 만 설명하고, 동일한 이름 (impl)을 가진 특성에 대해서는 언급하지 않았다. Rust 책은 특성을 명시 적으로 가져 오도록 지시합니다. 그렇다면 Dropuse mod1::Foo으로 가져 오지 않은 경우, 이것은 실제로 매우 나쁜 것입니다.

언어 디자이너가 작성한 것은 매우 나쁜 생각입니다. 고맙게도, 그들은 그렇게하지 않았습니다.가져 오기를 사용하면 가져온 코드에서 가져온 코드를 사용할 수 있습니다. 코드를 가져 오지 않으면 코드가 사라지지 않습니다.

컴파일러 자체는 Drop을 구현하는 유형의 사용자이므로 컴파일러 구현시 use Drop이있는 것으로 생각할 수 있습니다. 이것은 실제로는 이 아니며, 실제로는이 아니지만 정신 모델입니다. 코드가 Drop을 가져 오지 않았다고해서 다른 코드에서 가져올 수 없다는 것을 의미하지는 않습니다.

어쨌든 Drop을 가져올 필요가 없습니다. included in the prelude입니다.

관련 문제