Size: a a a

Rust — русскоговорящее сообществo

2020 April 20

ML

Mike Lubinets in Rust — русскоговорящее сообществo
egoarka
по мне так даже покруче тайпскрипта стало
🤔🤔🤔
источник

ЕХ

Евгений Худоба in Rust — русскоговорящее сообществo
Эрик
Я думаю, что лямбды так и останутся, потому что зависят от контекста. Каждой лямбде входящие типы считать - это не то, что можно сделать быстро.
он уже знает тип аргументов лямбды. Посмотри на group_by в моем примере
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да, но этот x, он внутри контекста. А lookup2 - вне контекста.
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Я думаю, что лямбды так и останутся, потому что зависят от контекста. Каждой лямбде входящие типы считать - это не то, что можно сделать быстро.
idea выводит
источник

KB

Kirill Bulatov in Rust — русскоговорящее сообществo
На самом деле, считается для лямбд на экране + для кода вокруг, чтобы типы правильно вывести.
Просто у автора скрина включена укорачивалка хинтов.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
idea выводит
Она их выводит как указатель на функцию, а кложуры в расте таки не функции.
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Она их выводит как указатель на функцию, а кложуры в расте таки не функции.
Функции тоже не функции в таком случае :)
источник

В

Вафель in Rust — русскоговорящее сообществo
Это просто условность обозначения
источник

Э

Эрик in Rust — русскоговорящее сообществo
Нет, функции как раз функции, они берут чётко определённое количество параметров.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А кложуры могут хватать всё вокруг в себя.
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Нет, функции как раз функции, они берут чётко определённое количество параметров.
Я к тому что у каждой функции тоже уникальный тип
источник

Э

Эрик in Rust — русскоговорящее сообществo
fn foo() {println!("foo");}
fn bar() {println!("bar");}

let b = true;

let a: fn() = if b {foo} else {bar};

a;
источник

Э

Эрик in Rust — русскоговорящее сообществo
С кложурами такое не проходит, потому что dyn Fn[Mut, Once].
источник

PK

Pavel Kvasnikov in Rust — русскоговорящее сообществo
Подскажите есть какие-нибудь либы для работы с аргументами командной строки? Чтобы можно было как-то декларативно описать какие могут быть параметры, как у них допустимые значения и ошибки
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
fn foo() {println!("foo");}
fn bar() {println!("bar");}

let b = true;

let a: fn() = if b {foo} else {bar};

a;
Это коерсия, которая работает и с клажурами.

let a: fn() = if b { || println!("foo") } else { || println!("foo") };
источник

С

Сергей in Rust — русскоговорящее сообществo
Pavel Kvasnikov
Подскажите есть какие-нибудь либы для работы с аргументами командной строки? Чтобы можно было как-то декларативно описать какие могут быть параметры, как у них допустимые значения и ошибки
источник

PK

Pavel Kvasnikov in Rust — русскоговорящее сообществo
👍
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
fn foo() {println!("foo");}
fn bar() {println!("bar");}

let b = true;

let a: fn() = if b {foo} else {bar};

a;
Вот в таком примере отлично видно что типы разные:

fn a() {}
fn b() {}
fn type_eq<T>(_: T, _: T) {}

type_eq(a, b);

Ошибка:

error[E0308]: mismatched types
--> src/main.rs:5:16
 |
5 |     type_eq(a, b);
 |                ^ expected fn item, found a different fn item
 |
 = note: expected fn item `fn() {a}`
            found fn item `fn() {b}`


(playground)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Это коерсия, которая работает и с клажурами.

let a: fn() = if b { || println!("foo") } else { || println!("foo") };
Как только ты что-то в них захватываешь, сразу начинается бардак.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f21f39719c6d9f3ff9b26f28cfccfd91
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Как только ты что-то в них захватываешь, сразу начинается бардак.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f21f39719c6d9f3ff9b26f28cfccfd91
Это понятно. Я лишь говорил что у функций тоже уникальные типы.
источник