Comments 21
Конкретно в этой версии ничего особо связанного (и в ближайших следующих ничего не предвидется), но в новой редакции книги есть глава про этот вопрос: http://rustbook.ru/ch17-00-oop.html
А в целом ответ классический — ооп в мэйнстримовом понимании термина нет, задачи решаются другими приемами.
Макрос для отладки прямо лучше, чем я мог представить. Это должно было в первую версию попасть.
В результате, вроде он и есть — но не очень нужен, хотя сама идея была хорошей.
Как-то слишком категорично, тем более что:
1) такое изменение можно внести потом, потому что оно обратно-совместимо;
2) ценой одной пары скобок это уже можно делать через кортеж:
fn main() {
let a = 0_u8;
let b = a + 1;
let c = "no";
dbg!((a, b, c));
}
Compiling playground v0.0.1 (/playground)
Finished dev [unoptimized + debuginfo] target(s) in 0.63s
Running `target/debug/playground`
[src/main.rs:5] (a, b, c) = (
0,
1,
"no"
)
[src/main.rs:5] a=0, b=1, c=«no»
а то сопоставлять переменные со значением неудобно.
Но тогда будет костыль с тем, что в этом специальном случае вызова "dbg!" он внезапно будет возвращать или ()
, или втихоря паковать перменные в кортеж.
Если возможность прозрачной вставки в середину выражения не нужна, то, кмк, проще ак и раньше "eprintln!" использовать с какой угодно форматной строкой:
eprintln!("a={}, b={}, c={}", a, b, c);
Если сильно надо, то такое довольно просто реализуется:
macro_rules! dbgs {
($val:expr) => {
dbg!($val)
};
($($val:expr),+) => {
eprint!("[{}:{}]", file!(), line!());
dbgs!(@dbgs $($val),+);
eprintln!();
};
(@dbgs $current:expr, $($val:expr),+) => {
eprint!(" {} = {:#?},", stringify!($current), $current);
dbgs!(@dbgs $($val),+);
};
(@dbgs $last:expr) => {
eprint!(" {} = {:#?}", stringify!($last), $last);
}
}
...
let a = 2;
let b = 3;
dbgs!(a + b);
dbgs!(a, b, a + b);
После запуска:
[src/main.rs:23] a + b = 5
[src/main.rs:24] a = 2, b = 3, a + b = 5
Как минимум офигенная штука для отладки кода в плейпене. Я (как и многие растовики) часто там код пишу, а нормального отладчика там все равно нет и вряд ли имеет смысл заморачиваться с втаскиванием.
Появилась возможность использовать русские/не латинские имена переменных и функций? Вроде в сообществе было обсуждение этой темы и собирались сделать...
RFC приняли, теперь вот тут — https://github.com/rust-lang/rust/issues/55467 — можно подписаться следить за статусом реализации.
Выпуск Rust 1.32