Парни Hai,
Мои поддерживающие разработчики говорили о лямбда-выражениях этим утром. Таким образом, я решил спросить это здесь в ТАК
Я не думаю, что есть общее правило, когда ваш должен использовать их , но если я смотрю на себя, я склонен использовать их всякий раз, когда я использую анонимные методы. Чаще всего это происходит при неренековом коде в новой теме с помощью ThreadPool
или при выполнении запросов LINQ.
Пример Threadpool:
ThreadPool.QueueUserWorkItem(state => {
// the code to run on separate thread goes here
});
LINQ:
var myItems = GetSomeIEnumerable()
.Where(o => o.SomeProperty.Equals("some value"));
.OrderBy(o => o.SomeOtherProperty);
Экспрессия лямбда - это анонимная функция, которая может содержать выражения и высказывания и может использоваться для создания делегатов или типов деревьев выражения.
Ожидание использования
del myDelegate = delegate(int x){return x*x; };
int j = myDelegate(5); //j = 25
Вы можете написать
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
Лично мне нужно будет в любое время отказаться от использования std::for_each
(написать специальные функторы/сложные boost:: лямбда
s), я нахожу BOOST _ FOREACH
и C++ 0x на основе диапазона для более четкого:
BOOST_FOREACH(Monster* m, monsters) {
if (m->has_plan())
m->act();
}
против
std::for_each(monsters.begin(), monsters.end(),
if_then(bind(&Monster::has_plan, _1),
bind(&Monster::act, _1)));
-121--670208- В более общем смысле, git help
поможет по крайней мере с такими простыми вопросами, как:
zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]
The most commonly used git commands are:
add Add file contents to the index
:
rm Remove files from the working tree and from the index
-121--1746888- По крайней мере, не используйте для событий a la
myUserControl.Loaded += (sender, e) => DoSomething(); // coding horror!!!1 :-P
, потому что на данный момент вы все еще не можете отписаться и очистить вещи больше так легко. Конечно, есть фабрики WeakEventHandler и другие элементы, но все равно лучше удалить все обработчики событий вручную, как только UserControl будет удален из родительского объекта.
Для всего остального, я думаю, они значительно улучшают читаемость, поэтому используйте по собственному усмотрению.
Да, вы можете сделать это так:
for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
System.out.println(alphabet);
}
Это также возможно с помощью набора:
for (int i = 65; i <= 90; i++) {
System.out.println((char)i);
}
-121--1166779- В настоящее время это невозможно из-за синтаксического анализатора yacc . Этот поток на Ruby-forum предлагает несколько решений.
class A
define_method(:hello) do | name, *opt_greeting|
option = opt_greeting.first || Hash.new
greeting = option[:greeting] || "hello"
puts greeting+" "+name
end
end
a = A.new
a.hello "barbara"
a.hello "Mrs Jones", :greeting => "Good Morning"
-121--2521471- Краткий ответ: прочитайте « C # в глубину » от самого популярного коллеги SO Джона Скита . Его отличная книга, и вы узнаете все о новых функциях C # 3, особенно когда их использовать, включая лямбда выражения.