使用gcc 4.9 -std = c ++ 14,我尝试制作一个lambdas向量:
vector<function<void ()>> v = {[]{cout << "foo";}, []{cout << "bar";}};
for (auto&& a: v) a();
Run Code Online (Sandbox Code Playgroud)
它运作得很好.然后我尝试将lambdas的初始化列表直接传递给基于范围:
for (auto&& a: {[]{cout << "foo";}, []{cout << "bar";}}) a();
Run Code Online (Sandbox Code Playgroud)
我得到了:
error: unable to deduce 'std::initializer_list<auto>&&' from '{<lambda closure object>main()::<lambda()>{}, <lambda closure object>main()::<lambda()>{}}'
Run Code Online (Sandbox Code Playgroud)
从错误消息的外观来看,我猜测它可能是因为" lambda闭包对象 "是内置语言术语,而不是std :: function的直接等价物(因此没有实际类型).
这个的深层原因是什么?此外,这可能是与实现相关的,还是由规范决定的行为?
问题是关于更快,即.更pythonic,测试迭代中的任何元素是否存在于另一个iterable中的方法.
我想要做的是:
if "foo" in terms or "bar" in terms or "baz" in terms:
pass
但显然这种方式重复了'in terms'子句并使代码膨胀,特别是当我们处理更多元素时.所以我想知道在python中是否有更好的方法.