Vladimir
И причем они тут?
Vladimir
И причем они к го
Vladimir
😅
Vladimir
А вообще разве оптимизации над конкретными типами не проще чем над обощенными, или я не вкуриваю
Anonymous
сложно
Алексей
господа, подскажите, почему в таком вот листинге, такой неожиданный вывод MATCH ?
#![allow(unreachable_patterns)]
fn main() {
println!("Start");
let mut test : String = "y".to_string();
match test {
d => println!("d"),
y => println!("y"),
_ => println!("неопределено"),
}
println!("Finish");
}
на выходе получается....
Start
d
Finish
Алексей
ну и куча ворнингов unreachable_patterns
Алексей
впринципе ему без разницы что в переменной TEST, он все равно напечатает D
Anonymous
непонятно что за d, y
Алексей
по сути это значение строки test
Anonymous
че
Anton
литералы должны быть заключены в кавычки?
Алексей
почему он не Y печатает , а D ?
Vladimir
Смотри
Loyd
Потому что это паттерн матчинг
Anton
он присваевает матч в переменную d
Loyd
Тебе нужен x if x == d
Vladimir
У тебя матчи d как переменную
Anton
Насколько я понимаю
Алексей
я хочу что бы он посмотрел что в переменной TEST, и в зависимости из этого, напечатал принт с такой буквой
Anonymous
почитай про паттерны
Алексей
но он всегда берет первое значение, и пофигу что в переменной
Vladimir
Блять
Vladimir
Он биндит твоё значение в переменную d
Loo
Anton
чтобы ни было в тест если оно успешно оно в D
Алексей
почему он её биндит, если н должен сравнить ? и d это не переменная... ну так же case работают (
Anton
Это не switch
Vladimir
fn main() {
println!("Start");
let mut test : String = "y".to_string();
match test.as_str() {
"d" => println!("d"),
"y" => println!("y"),
_ => println!("неопределено"),
}
println!("Finish");
}
Anonymous
почитай про паттерны
Vladimir
Vladimir
Anonymous
я чет был под убеждением что в match можно ставить уже определенные переменные
Anonymous
🤔
Anton
https://play.rust-lang.org/?gist=4f87273af5c2497fd9770fad4b8fb054&version=stable
Anton
Если так
Vladimir
Anonymous
ну в скале вродь так
Vladimir
как тогда отличить патерн матчинга, и биндинга?
Anonymous
аа там специальный синтаксис
Anonymous
прикольно
Anton
Алексей
Если так
let mut test : String = "y".to_string();
match test {
"d" => println!("d"),
"y" => println!("y"),
_ => println!("неопределено"),
}
но если так, то тоже ошибка уже несовпадения типа. Почему если указываю при инициализации что это строка, то он выдает ошибку ?
Anonymous
Anton
потому что это не строка
Anonymous
Anton
там String а в матче &str
Алексей
Anonymous
не видно
Vladimir
Перечитай
Alexander
Декомпозиция создаёт переменные, что в match, что в if, что в заголовке функции.
Сравнить с другой переменной можно только оператором сравнения.
Алексей
C++ меня стороной совсем обошло, rust получается первый системный язык
Vladimir
https://doc.rust-lang.org/1.5.0/book/patterns.html
Anton
Anonymous
Anonymous
💤
Anton
Буквально вчера было в чате
Алексей
Буквально вчера было в чате
допустим насчёт строки и символа туплю. Но ведь он все равно все заносил по первому варианту, раст НЕ использовал "_"
Anton
1. упрощенно &str это ссылка на строку которую нельзя менять, String это строка - с выделеным буфером которую можно менять
Vladimir
СЕРЬЕЗНО НЕТУ?
Vladimir
let x = 'x';
let c = 'c';
match c {
x => println!("x: {} c: {}", x, c),
}
println!("x: {}", x)
Anton
2. в match не допустимо использование переменных если ты хочешь чтобы он работал как switch(x) case "y"
Anton
то пиши литералы
Anton
если ты пишешь символ он ТУДА распаковывает значения перменной тест
Vladimir
короче как кейс он работает ток по константам
Anton
_ => одночает - любой другой вариант, который для строки на вскидку не придумать
Anton
например у тебя есть enum
Anton
A, B , C
Anton
ты проверяешьь только A
Anton
B и C упадут в _ =>
Anonymous
зачем основы объяснять
Vladimir
та да
Anton
Чиловек прочитал и не понял
Vladimir
причем в столбик
Anton
че*
Loyd
Vladimir
ps: _ это тоже переменная, только без имени
Алексей
хохма, я эту книгу прочёл в русском переводе.... там нету этого пункта