1.83K subscribers
3.31K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #rust #article

Control flow patterns in Rust

Не слишком информативный пост для опытных Rust-программистов, но увидел любопытный паттерн для обхода отсутствия let-chains.

Именно, вместо

let deadline = if let Some(settings) = self.settings {
if let Some(deadline) = settings.deadline {
if settings.deadline_override && deadline > 0 {
deadline
} else {
self.default_deadline
}
} else {
self.default_deadline
}
} else {
self.default_deadline
};

можно воспользоваться labeled block break и написать

let deadline = 'done: {
if let Some(settings) = self.settings {
if let Some(deadline) = settings.deadline {
if settings.deadline_override && deadline > 0 {
break 'done deadline;
}
}
}
self.default_deadline
};
👍8💩6🤯2😍1
Блог*
#prog #rust #article Control flow patterns in Rust Не слишком информативный пост для опытных Rust-программистов, но увидел любопытный паттерн для обхода отсутствия let-chains. Именно, вместо let deadline = if let Some(settings) = self.settings { if…
А ещё там есть пример для эмуляции for-else из Python, но этот пример лишь лишний раз укрепил меня во мнении, что эта языковая конструкция попросту не требуется в языке с достаточно продвинутыми итераторами.

К примеру, оригинал на Python:

items = [3,5,7,11,13,17]
item = 19
location = None
for i, x in enumerate(items):
if x == item:
location = i
break
else:
# break was not triggered
location = len(items)
items.append(item)

и его переделка на Rust, предложенная автором:

let mut items = vec![3,5,7,11,13,17];
let item = 19;
let location = 'find_item: {
for (i, x) in items.iter().enumerate() {
if *x == item {
break 'find_item i;
}
}

// only reached when not breaking
items.push(item);
items.len() - 1
};

На мой взгляд, с использованием итераторов Rust это можно записать более кратко без потери выразительности:

let location = match items
.iter()
.position(|&x| x == item)
{
Some(idx) => idx,
None => {
let idx = items.len();
items.push(item);
idx
}
};
👍8💩3❤‍🔥1🔥1
Fun fact: std::derived_from из C++ не имеет никакого отношения к derive-макросам из Rust
💩6🥴3
​​В последние 2 года регулярно слышу "ой, ну я не верующий, я не могу есть куличи".

Да ну вы чего!! Вас забуллила бабка у церкви или в твиттере кто-то предъявил? Раньше не было такой ерунды.

Не позволяйте никому встать между вами и вкусной сдобой с цукатами! Мы живем в прекрасное время, когда от любого праздника, традиции или обряда можно брать только ту часть, которая вам нравится, и не погружаться в детали, если не хочется. Единственная уместная куличиковая полиция - это та, которая ходит и раздает всем куличи, а не запрещает их есть.

Всем вкусных булок и нарядных яиц!
👍24🤡42💩1
Это, конечно, нужно быть большим оригиналом, чтобы инсценировать свои смерть, воскрешение и вознесение на небо только ради того, чтобы избежать призыва.
😁8💩3🤡2
А вы тоже постоянно покупаете новые резинки и заколки для волос, которыми потом не пользуетесь, или вы нормальные?
🥴13😁5💩2🤡1
😁3🤮3💩1
Forwarded from Neural Machine
Ты всегда будешь ходить в деканат
😢9💩2😁1
BEGIN TRANSACTION;
🤔8💩3👏1
INSERT INTO plane VALUES (anton);
👍16💩3
DROP TABLE russia;
🤡33🎉18👍8💩72😢2👏1😁1
CREATE TABLE armenia;
🎉25🤡14👍4💩2
DELETE FROM plane WHERE passenger = anton;
🔥13💩3
COMMIT;
🎉36🤡9💩4🤔1