Questions tagged «lambda»

不要使用AWS服务(对于这些问题,请使用[aws-lambda]!)Lambda是匿名函数或编程语言(例如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java)中的闭包。(也就是lambda表达式。)

3
重载lambda函数
如何重载简单的本地lambda函数? SSE原始问题: #include <iostream> #include <map> void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map<char, int> table{ {'a', 0}, {'b', 1}, {'c', 2}, {'d', 3}, {'e', 4}, {'f', 5}, …

1
标准是否保证无捕获的lambda为空?
我正在寻找一种从模板函数中的其他lambda识别空(无捕获)lambda的方法。我目前正在使用C ++ 17,但我也对C ++ 20的答案感到好奇。 我的代码如下所示: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr (/* is captureless */) { // do stuff } } C ++标准(17或20)是否保证可转换为函数指针的不可捕获lambda也会使std::is_emptyyield 变为true? 以以下代码为例: auto a = []{}; // captureless auto b = [c = 'z']{}; // has …
12 c++  lambda  c++17  c++20 

1
为什么类型参数比方法参数更强大
为什么是 public <R, F extends Function<T, R>> Builder<T> withX(F getter, R returnValue) {...} 然后更严格 public <R> Builder<T> with(Function<T, R> getter, R returnValue) {...} 这是为什么在编译时不检查lambda返回类型的后续操作。我发现使用withX()类似的方法 .withX(MyInterface::getLength, "I am not a Long") 产生所需的编译时错误: 类型BuilderExample.MyInterface中的getLength()类型很长,这与描述符的返回类型不兼容:字符串 而使用该方法with()则没有。 完整的例子: import java.util.function.Function; public class SO58376589 { public static class Builder<T> { public <R, F extends Function<T, …

3
具有多个匹配目标类型的lambda表达式的方法签名选择
我正在回答一个问题,遇到了无法解释的情况。考虑以下代码: interface ConsumerOne<T> { void accept(T a); } interface CustomIterable<T> extends Iterable<T> { void forEach(ConsumerOne<? super T> c); //overload } class A { private static CustomIterable<A> iterable; private static List<A> aList; public static void main(String[] args) { iterable.forEach(a -> aList.add(a)); //ambiguous iterable.forEach(aList::add); //ambiguous iterable.forEach((A a) -> aList.add(a)); //OK } } …
11 java  generics  lambda  javac  ecj 

1
Java-8中的方法参考和泛型
我面临方法引用与泛型类型结合使用的问题。 我们有需要调用重载方法的代码,但是由于错误而失败: 无法解析值m1() 我简化了我的问题,以明确问题出在哪里。 以下代码失败: public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } <E extends I1, T> void setValue(BiConsumer<E, T> cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void m1(int value) { …
11 java  generics  lambda  java-8 

5
Lambda的C ++三元赋值
知道为什么以下代码段无法编译吗?它报错“错误:?的操作数:具有不同的类型” auto lambda1 = [&](T& arg) { ... }; auto lambda2 = [&](T& arg) { ... }; auto lambda = condition ? lambda1 : lambda2;

2
尽管明确说明了返回类型,但对lambda的调用还是模棱两可的
鉴于lambda的类型是可确定的(可强制转换为a std::function(请纠正我,如果我错了,请纠正我)),重载函数应该同时使用两个函子。已定义?([&]() -> Type {}) 请注意,对于我当前的解决方案,我需要按引用捕获,这就是为什么代码包含其逻辑的原因。 以下示例描述了该问题: #include <iostream> #include <string> #include <functional> void do_some(std::function<void(int)> thing) { thing(5); } void do_some(std::function<bool(int)> thing) { if (thing(10)) { std::cout << "it's true!" << std::endl; } } int main() { int local_to_be_modified = 0; do_some( [&](int in) { local_to_be_modified = in; std::cout << …

6
如何在Java中从给定的地图值中查找最新日期
我有下面的值的哈希映射,在值中我已经日期为字符串数据类型。我想比较地图中所有可用的日期,并仅提取一个具有最近日期的键值。 我想与值而不是键进行比较。 我已包含以下代码 import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "1999-01-01"); map.put("2", "2013-10-11"); map.put("3", "2011-02-20"); map.put("4", "2014-09-09"); map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v)); } } 预期的输出是: 关键4值2014-09-09

3
Java Stream:过滤多个范围
我正在尝试过滤资源并基于字段排除一些元素。要排除,我有一个集合(其中包含一个需要排除的ID)和一个列表(其中包含多个范围的需要排除的ID)。我写了下面的逻辑,但对第二个过滤器逻辑不满意。有没有更好的方法可以用Java 8做到这一点?对于包含范围,我也需要这样做。 Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900")); List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000")); return directoryRecords.stream() .filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber())) .filter((directoryRecord -> { Boolean include = true; for(String s : rangesToExclude) { String [] rangeArray = s.split("-"); Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber()); if(extension <= Integer.parseInt(rangeArray[0]) && extension >= Integer.parseInt(rangeArray[1])) { include = false; } …

3
在C ++ 14中具有Init Capture的C ++ Lambda代码生成
我试图理解/阐明将捕获传递给lambda时生成的代码,尤其是在C ++ 14中添加的广义init捕获中。 提供下面列出的以下代码示例,这是我目前对编译器将生成的内容的理解。 情况1:按值捕获/默认值捕获 int x = 6; auto lambda = [x]() { std::cout << x << std::endl; }; 等于: class __some_compiler_generated_name { public: __some_compiler_generated_name(int x) : __x{x}{} void operator()() const { std::cout << __x << std::endl;} private: int __x; }; 因此,存在多个副本,一个副本要复制到构造函数参数中,而另一个副本要复制到成员中,这对于矢量等类型而言将是昂贵的。 情况2:按引用捕获/默认按引用捕获 int x = 6; auto lambda …
9 c++  lambda  c++14  move 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.