2015-04-27 4 views
2

Как сохранить переменную в строке? Я читал примеры, но они всего лишь println!().Как отправить интерполированную строку на канал?

//javascript 
var url_str = "http://api.weather/city" + city_code + "/get"; 

//go 
urlStr := fmt.Sprintf("http://api.weather/%s/get", cityCode) 

// Edit: Rust 
let url_str = format!("http://api.openweathermap.org/data/2.5/weather?q={}", city_code); 

Я использую tx.send() и хочу отправить интерполированную строку на канале, как это:

let url_str = "http://api.weather"; 
c.send(url_str); 

, но я получаю сообщение об ошибке

src/http_get/http_getter.rs:21:17: 21:24 error: `url_str` does not live long enough 
src/http_get/http_getter.rs:21   c.send(&url_str); 
              ^~~~~~~ 

Вот функция, которую я пытается реализовать для построения URL-адреса:

pub fn construct_url(c: &Sender<String>, city_code: &str) { 
     let url_str = format!("http://api.openweathermap.org/data/2.5/weather?q={}", city_code); 
     println!("{}", url_str); 
     c.send(url_str); 
} 
+0

Хм, 'url_str', кажется, не является интерполированной строкой? Не могли бы вы добавить дополнительные сведения, например. как создается 'c'? – huon

+0

привет, я добавил fn, что я использую – Hokutosei

ответ

3

С Опущенные жизни и типов восстановлены, вот что у вас есть:

pub fn construct_url<'a, 'b, 'c>(c: &'a Sender<&'b str>, city_code: &'c str) { 
    let url_str: String = format!("http://api.openweathermap.org/data/2.5/weather?q={}", city_code); 
    println!("{}", url_str); 
    c.send(&url_str); 
} 

Имейте в виду различия между String и &str: &str является строка ломтика, ссылка на строку, что кто-то владеет; String является собственностью.

'b обязательно по крайней мере до тех пор, пока все тело функции - любая строка, которую вы построите внутри функции, не будет достаточно долго жить для 'b. Поэтому вашему отправителю необходимо будет отправить String, а не &str.

pub fn construct_url(c: &Sender<String>, city_code: &str) { 
    let url_str = format!("http://api.openweathermap.org/data/2.5/weather?q={}", city_code); 
    println!("{}", url_str); 
    c.send(url_str); 
} 
+0

потрясающий, который сработал! Я запутался с 'String', а' & str' обновит мой пост. Спасибо! – Hokutosei

Смежные вопросы