lambda 相关问题

编程语言中的匿名函数或闭包,如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java。 (另外,lambda表达式。)

请解释一下Function.compose()的操作顺序

Java.util.function.Function 中的默认方法 默认函数然后(函数之后){ Objects.requireNonNull(之后); 返回 (T t) -> 之后。

回答 1 投票 0

不明白Function.compose()的操作顺序

Java.util.function.Function 中的默认方法 默认函数然后(函数之后){ Objects.requireNonNull(之后); 返回 (T t) -> 之后。

回答 1 投票 0

我学习Java的lambda语法时遇到的问题

Java.util.function.Function 中的默认方法 默认函数然后(函数之后){ Objects.requireNonNull(之后); 返回 (T t) -> 之后。

回答 1 投票 0

基于聚合和当前记录排除的python中位数

我想添加一个新列,该列反映基于键值的 value1 分组计算出的中位数,但将每个记录本身排除在中位数计算之外。 以下是数据示例

回答 1 投票 0

Expression.使用自定义函数调用数组

我有一个项目列表,我想通过表达式,使用我自己的自定义函数过滤掉项目。 像这样的东西 返回 Items.Where(Foo) private static bool Foo(Item item) { item.Name.Equa...

回答 1 投票 0

s3bucketnotifications 不适用于 localstack 和 docker

我的情况是这样的: 有一个 xml 通过预签名的 URL 上传到 Amazon S3。 文件上传到 S3 后,我们希望 SQS 队列通过 S3 事件通知了解情况。 一旦...

回答 1 投票 0

如何将我的 serverless.yml 文件拆分为多个文件?

我正在为我的 AWS 支持的应用程序使用无服务器框架。到目前为止,我一直在编写一个超长的 serverless.yml 文件,其中包含我所有的 lambda 代码、资源、IAM 角色和 State Mac...

回答 4 投票 0

Excel - 如何使用 LAMBDA() 替换单元格中的多个字符或整个单词

冒着偏离主题的风险,我决定做一些问答,因为我对 MS 向 Excel365 引入的新功能感到非常兴奋; LAMBDA() 函数。如果普遍意见是这样的话...

回答 2 投票 0

为什么显式捕获 constexpr 变量不起作用,而不捕获它却有效

我编写了以下具有两个 lambda 的代码。其中一个明确捕获了 i,而另一个则没有。注意 i 是 constexpr,因此我们不需要显式捕获它。 我的问题是为什么 func(la...

回答 1 投票 0

覆盖map::直接与lambda函数比较

尝试使用 lambda 覆盖 map::compare 函数,似乎以下解决方案有效。 自动 cmp = [](const int&a, const int& b) { 返回 a < b; }; std::map 尝试使用 lambda 覆盖 map::compare 函数,似乎以下解决方案有效。 auto cmp = [](const int&a, const int& b) { return a < b; }; std::map<int, int, decltype(cmp)> myMap(cmp); 但是,我必须先定义cmp,然后再使用它。 我可以在不定义“cmp”的情况下执行此操作吗? 不,你不能在未评估的上下文中使用 lambda —— 即示例中的模板参数。 所以你必须在其他地方定义它(使用auto),然后使用decltype...另一种方式,正如已经提到的那样,是使用“序数”函子 如果您的问题是关于“如何在定义映射时使用 lambda 表达式 *once*”,您可以利用 lambda 到 std::function 的隐式转换,如下所示: #include <iostream> #include <functional> #include <map> int main() { auto m = std::map<int, int, std::function<bool(const int&, const int&)>>{ [](const int& a, const int& b) { return a < b; } }; return 0; } 您可以为该 map 类型引入别名,以减少以后的输入... #include <iostream> #include <functional> #include <map> #include <typeinfo> typedef std::map< int, int, std::function<bool(const int&, const int&)> > MyMap; int main() { auto cmp = [](const int& a, const int& b) { return a < b; }; MyMap map(cmp); return 0; } 使用 std::function 为比较器类型提供适当的类型签名,您可以定义映射类型,然后分配您想要的任何 lambda 比较。 您可以执行类似的操作,其中映射的类型是从您传递给函数的函数推导出来的。 #include <map> template<class Key, class Value, class F> std::map<Key, Value, F> make_map(const F& f) { return std::map<Key, Value, F>{f}; } int main() { auto my_map = make_map<int, int>([](const int&a, const int& b) { return a < b; }); my_map[10] = 20; } 我没有看到这样做的太多理由,但我不会说这是无用的。通常,您需要一个已知的比较器,以便可以轻松传递地图。通过上面的设置,您可以一直使用模板函数,如下所示 tempalte<class F> void do_somthing(const std::map<int, int, F>& m) { } 这不一定是坏事,但我的直觉告诉我,拥有一种只能由泛型函数处理的类型是不好的。我认为它对于 lambda 函数来说效果很好,但仅此而已。这里的解决方案是使用 std::function #include <map> #include <functional> template<class Key, class Value> using my_map_t = std::map<Key, Value, std::function<bool(const Key&, const Key&)>>; int main() { my_map_t<int, int> my_map{[](const int&a, const int& b) { return a < b; }}; my_map[10] = 20; } 现在您可以使用任何您想要的谓词,并且您有一个可以使用的具体类型,my_map 希望这有帮助! 自 C++20: 如果没有指定捕获,闭包类型有一个默认的default 构造函数。 因此你可以做到这个: std::map<int, int, decltype([](const int&a, const int& b) { return a < b; })> myMap; int main() { myMap.insert({7, 1}); myMap.insert({46, 2}); myMap.insert({56, 3}); for (const auto& [key,value]:myMap) { std::cout << key << " " << value << std::endl; } }

回答 4 投票 0

如何使用 typescript cdk 在 python lambda 函数中使用外部 python 库

我从一个 cdk 项目(打字稿)开始,我想了解如何部署一个用 python 编写的依赖于外部库(请求)的 lambda 函数。我也想知道

回答 1 投票 0

如何访问超过一种自定义类型深度的属性?

C# 初学者在这里。我有这个: 公开课项目 { 公共 int id { 得到;放; } 公共字符串名称{获取;放; } 公共虚拟 ICollection 属性 { get;放; } { 公开

回答 1 投票 0

捕获此内容并将 lambda 与 fmt::join 结合转发到另一个 lambda

我之前问过这个问题。现在我已将其扩展到以下示例中所示的实际用例(此处有链接): #包括 #包括 #包括 我之前问过这个问题。现在我已将其扩展到以下示例中所示的实际用例(带有链接here): #include <ranges> #include <map> #include <functional> #include <fmt/format.h> #include <iostream> template<typename RANGE, typename LAM> auto foo(RANGE&& range, LAM&& lambda) { return fmt::join(range | std::views::transform( [lam = std::forward<LAM>(lambda)](const auto& element) { return lam(element); }), ","); } class boo { public: int add {2}; void call_foo(){ std::vector<int> d { 2,3,4,5,6}; auto f = fmt::format("{}", foo(d, [this](int i) { std::cout << add << std::endl; return add + i; })); std::cout << f << std::endl; }; }; int main() { std::cout << "HELLO" << std::endl; boo b; b.call_foo(); } 这再次导致std::cout << add << std::endl;处出现段错误。由于它在 fmt::join 内部没有 foo 的情况下工作,我怀疑 fmt::join 不能很好地应对我所得到的。 关于问题是什么以及如何解决的任何想法 那是因为这个坏了: template<typename RANGE, typename LAM> auto foo(RANGE&& range, LAM&& lambda) { return fmt::join(range | std::views::transform( [lam = std::forward<LAM>(lambda)](const auto& element) { return lam(element); }), ","); } C++20(以及之前的 range-v3)具有 view 的广义概念,它不仅仅是迭代器/哨兵对。它也可以有任意状态。对于 views::transform,该状态包括函数对象(当然还有底层的 view)。 问题是,fmt::join - 虽然它看起来像其他系列机械,但实际上并非如此。它只是做这个: template <typename Range> auto join(Range&& range, string_view sep) -> join_view<decltype(detail::adl::adlbegin(range)), decltype(detail::adl::adlend(range))> { return join(detail::adl::adlbegin(range), detail::adl::adlend(range), sep); } 也就是说 - 它只是从范围中取出 begin() 和 end() 并存储它们,扔掉范围的其余部分。 这对于某些范围(特别是借用范围)来说是可以的,但不是全部。具有状态转换的 views::transform(如您此处所示)不是借用的范围 - 您需要在某处保留该可调用对象,而这在这里不会发生。因此出现了问题。 值得注意的是,这只是一个问题,因为views::transform实际上在使用之前就被破坏了。如果您在完整的管道构造中使用 fmt::join ,它会工作得很好: auto f = fmt::format("{}", fmt::join(d | std::views::transform([this](int i) { std::cout << add << std::endl; return add + i; }), ",")); 因为临时 transform 直到完整表达式结束(即所有格式化发生之后)才会被销毁。 一般来说,最好只使用这样的fmt::join。理想情况下,我们只需扩展范围格式说明符以包含分隔符,这样我们就完全不需要 fmt::join。

回答 1 投票 0

如何处理Executor/FutureTask流上的lambda表达式?

这是我的任务类: 公共接口任务回调{ void onTaskCompleted(布尔结果); 无效onTaskFailed(异常e); } 公共类 AsyncTaskExample { 私人最终执行程序exe...

回答 1 投票 0

在C#中获取FieldExpression值

我是 C# 表达式的新手,我正在尝试创建一个从 Expression> 到 SQLWhere 子句的转换器。当提供的表达式如下所示时,我设法做到了这一点

回答 0 投票 0

Java8 中的 BiSupplier

我见过 BiConsumer、BiPredicate、BiFunction,但没有见过 BiSupplier 或类似的。我尝试了下面的代码,但出现了异常: “BiSupplie 中发现多个非重写抽象方法...

回答 3 投票 0

捕获此并将 lambda 转发到另一个 lambda

我遇到了这样的情况:我需要将 lambda 传递到一个自由函数中,该函数将在另一个 lambda 函数中调用此 lambda。我在下面做了一个例子(链接): #包括 #包括 我遇到了需要将 lambda 传递到一个自由函数中的情况,该函数将在另一个 lambda 函数中调用此 lambda。我在下面做了一个例子(link): #include <ranges> #include <map> #include <format> #include <functional> #include <iostream> template<typename RANGE, typename LAM> auto foo(RANGE range, LAM&& lambda) { return range | std::views::transform( [&](const auto& element) { return lambda(element); }); } class boo { public: int add {2}; void call_foo(){ std::vector<int> d { 2,3,4,5,6}; auto f = foo(d, [this](int i) { std::cout << add << std::endl; return add + i; }); std::cout << f[0] << f[1] << std::endl; }; }; int main() { std::cout << "HELLO" << std::endl; boo b; b.call_foo();is no longer valid inside the lambda, } 这里的代码段错误: std::cout << add << std::endl; 这基本上是因为 this 在 lambda 内部变得悬空。但是,我不明白为什么会发生这种情况,以及如何避免这种情况发生。 我也尝试过按值计算 foo 内的 lambda 并移动/前进,但没有得到积极的结果。 不,不是 this 变得悬空,而是 range 和您传递给 foo 的 lambda 一旦 foo 返回就变得悬空。您需要引用 d 并按内部 lambda 中的值获取 lambda: template <typename RANGE, typename LAM> auto foo(RANGE& range, LAM&& lambda) { // ^ return range | std::views::transform( [lambda](const auto& element) { return lambda(element); }); // ^^^^^^ }

回答 1 投票 0

使用 Lambda 连接实体框架 6 中的多个表后获取选定值

我有三个表(此问题的简化示例): 模型是使用 EntityFramework 数据库优先方法生成的。 所有者模型 公共部分类所有者 { 公共所有者() { ...

回答 1 投票 0

递归 Lambda 加入完整的父子层次结构

我想要像图片中最后一列那样的结果(完整层次结构)。 我可以创建多个支撑柱。但我几乎确信可以使用递归 lambda 来做到这一点。 我做了...

回答 1 投票 0

捕获函数指针作为引用会导致段错误

我试图理解为什么以下代码会导致段错误: #包括 #包括 结构体 Foo { Foo() = 默认值; 无效回调1() { std::cout...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.