Re: Не распарсил конструкцию с []
От: vaa  
Дата: 31.01.22 04:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Кто может ткнуть носом, что значит [socket] — что за конструкция?


S>
S>socket.receive([socket](std::vector<unsigned char> data) {
S>


как мы видим на этом куске кода C++ и C# отрогональны друг другу. так в C# лямбда захватывает все что находится в контексте.
Т.t. замкнуть на самом деле значение переменной в в объявлении сишарповой лямбды( анонимной функции ) просто невозможно.

string name = "Alice";
var closure = Closure(name);
var lambda = new Lamda(delegate { WriteLine($"Hello, {name}!"); });
lambda();
closure();
name = "Bob";
lambda();
closure();
Action Closure(string name) => delegate { WriteLine($"Hello, {name}!"); };
public delegate void Lamda();


C++ же в конструкте анонимной функции наворотил еще больше. что проще для понимания хз. ну в плюсах это хотя бы явно.

Как тут уже замечали MS любит придумывать собственную терминологию, что вносит дополнительную путаницу в смыслы той или иной техники.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Не распарсил конструкцию с []
От: saf_e  
Дата: 01.02.22 15:25
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>Здравствуйте, Shmj, Вы писали:


S>>Кто может ткнуть носом, что значит [socket] — что за конструкция?


S>>
S>>socket.receive([socket](std::vector<unsigned char> data) {
S>>


vaa>как мы видим на этом куске кода C++ и C# отрогональны друг другу. так в C# лямбда захватывает все что находится в контексте.

vaa>Т.t. замкнуть на самом деле значение переменной в в объявлении сишарповой лямбды( анонимной функции ) просто невозможно.

Если почитать вот тут (домотать до How's It Work?): https://web.archive.org/web/20150707082707/http://diditwith.net/PermaLink,guid,235646ae-3476-4893-899d-105e4d48c25b.aspx
То видно что логика практически идентична. С той лишь разницей что в ++ больше контроля над захватом, а в # захваченная переменная помещается в некий общий контекст и таким образом меняется сразу для всех участников, и продолжает жить по выходу из скоупа.

Если есть сомнения — посмотрите в IL, в последний раз как я это делал так и было )
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.