当字符串存储为a String而不是a时,&str它无法实现特征ToSocketAddrs.最接近的可能是impl<'a> ToSocketAddrs for (&'a str, u16).
use std::net::TcpStream;
fn main() {
let url = "www.google.com".to_string(); // String
let url2 = "www.google.com"; // &'static str
let port = 80;
// Does not work
let tcp = TcpStream::connect((url, port));
// Works
let tcp2 = TcpStream::connect((url2, port));
}
Run Code Online (Sandbox Code Playgroud)
这失败了:
error[E0277]: the trait bound `(std::string::String, {integer}): std::net::ToSocketAddrs` is not satisfied
--> src/main.rs:9:11
|
9 | let tcp = TcpStream::connect((url, port));
| ^^^^^^^^^^^^^^^^^^ the trait `std::net::ToSocketAddrs` is not implemented for `(std::string::String, {integer})`
|
= help: the following implementations were found:
<(std::net::Ipv6Addr, u16) as std::net::ToSocketAddrs>
<(std::net::Ipv4Addr, u16) as std::net::ToSocketAddrs>
<(&'a str, u16) as std::net::ToSocketAddrs>
<(std::net::IpAddr, u16) as std::net::ToSocketAddrs>
= note: required by `std::net::TcpStream::connect`
Run Code Online (Sandbox Code Playgroud)
为了实现这个特性,我怎样才能强制String进入a ?从Rust 1.0的文档中,我认为会自动转移到.&strToSocketAddrsString&str
仅当您需要使用切片语法获取字符串的切片时才std::net::ToSocketAddrs实现:(&str, _)&url[..]
let tcp = TcpStream::connect((&url[..], port));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |