官术网_书友最值得收藏!

  • Rust Quick Start Guide
  • Daniel Arbuckle
  • 329字
  • 2021-06-10 19:46:06

Type inference

As we noticed earlier, we can specify the type of a variable, but we often don't have to. That's because Rust has a feature called type inference, which often lets it figure out what type a variable is by looking at what we do with it. For example, if we were using the Tokio networking library, we might use code such as this:

let addr = "127.0.0.1:12345".parse()?;
let tcp = TcpListener::bind(&addr)?;

We didn't specify what type the addr variable should have. Even more interesting, we didn't tell the text address what kind of information we needed it to parse into.

Parsing means transforming a representation into usable data, approximately. Lots of things can be represented as a string of text, if you know how to parse that text into the information you really want.
The question marks in this example are part of Rust's error handling mechanism, and the ampersand is an operator that affects how the addr variable is shared with the function. We'll see more on both of those soon.

However, Rust can see that we're passing the addr variable (or rather, a reference to it, but more on that in the next chapter) as a parameter of the TcpListener::bind function, and it knows that that function needs a reference to a SocketAddr, so addr must be a SocketAddr. Then, since it has figured out that addr is a SocketAddr, it takes it a step further and determines that it should use the string parsing function that produces a SocketAddr as its resulting value.

Type inference can save an amazing amount of time in a language as strict as Rust. On the other hand, it can be surprising if you see an error message about a data type you've never heard of, because Rust decided that it was the one you needed. If that happens, try assigning the type you actually expect to your variable and see what the Rust compiler has to say afterward.

主站蜘蛛池模板: 南澳县| 西宁市| 新干县| 渝中区| 新晃| 木兰县| 马山县| 论坛| 太白县| 东台市| 孟连| 进贤县| 邵东县| 襄城县| 桦南县| 大庆市| 天峻县| 洞口县| 灵山县| 阜新| 和静县| 丰台区| 合江县| 宜阳县| 西乌| 东山县| 乌苏市| 平原县| 土默特左旗| 台湾省| 石渠县| 阿城市| 安国市| 临高县| 台安县| 永兴县| 德惠市| 漳浦县| 宜良县| 南和县| 南通市|