lambda 相关问题

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

值位于枚举列表中

我有一个相当基本的问题:如何检查给定值是否包含在枚举值列表中? 例如,我有这个枚举: 公共枚举用户状态 { 未经证实, 积极的, 雷姆...

回答 7 投票 0

PyQt QObject.connect(instancemethod) 和 QtCore.connect(Qobj, SIGNAL(), instancemethod) 的行为与 lambda 函数不同

在从字符串列表创建 PyQt 菜单的后续过程中,我也在动态创建菜单,并想知道单击了哪个菜单项。因此我使用了一段代码,例如: 对于

回答 1 投票 0

参数数量在编译时确定的 Lambda 函数

我想声明一个具有 N 个参数的 lambda 函数,其中 N 是模板参数。就像是... 模板 A类{ 标准::函数 我想声明一个具有 N 个参数的 lambda 函数,其中 N 是模板参数。类似... template <int N> class A { std::function<void (double, ..., double)> func; // exactly n inputs }; 我想不出用元函数范例来做到这一点的方法。 您可以使用嵌套的 typedef n_ary_function 编写模板 type。该类型可以如下使用: template <int N> class A { typename n_ary_function<N, double>::type func; }; 以下代码片段包含n_ary_function的定义: template <std::size_t N, typename Type, typename ...Types> struct n_ary_function { using type = typename n_ary_function<N - 1, Type, Type, Types...>::type; }; template <typename Type, typename ...Types> struct n_ary_function<0, Type, Types...> { using type = std::function<void(Types...)>; }; 元template采用模板、计数和类型,并使用类型的N副本调用模板: template<template<class...>class target, unsigned N, class T, class... Ts> struct repeat_type_N: repeat_type_N<target, N-1, T, T, Ts...> {}; template<template<class...>class target, class T, class... Ts> struct repeat_type_N<target, 0, T, Ts...> { typedef target<Ts...> type; }; template<template<class...>class target, unsigned N, class T> using repeat_type_N_times = typename repeat_type_N<target, N, T>::type; 现在,我们使用它: template<typename... Ts> using operation=void(Ts...); template<unsigned N, class T> using N_ary_op = repeat_type_N_times< operation, N, T >; template<unsigned N> using N_double_func = N_ary_op<N,double>; 我们测试一下: void three_doubles(double, double, double) {} int main() { N_double_func<3>* ptr = three_doubles; std::function< N_double_func<3> > f = three_doubles; } 并获胜。 您到底使用double, double, double做什么完全取决于您在上述系统中的情况。例如,您可以使用 lambda 来初始化 std::function。 您可以将 double, double, double 打包到 template<class...>struct type_list{}; 中,这样您就可以将其作为一个参数传递给另一个 template,然后专门对其进行解包。 A repeat_type 对于大 N 具有较少的递归: // package for types. The typedef saves characters later, and is a common pattern in my packages: template<class...>struct types{typedef types type;}; // Takes a target and a `types`, and applies it. Note that the base has no implementation // which leads to errors if you pass a non-`types<>` as the second argument: template<template<class...>class target, class types> struct apply_types; template<template<class...>class target, class... Ts> struct apply_types<target, types<Ts...>>{ typedef target<Ts...> type; }; // alias boilerplate: template<template<class...>class target, class types> using apply_types_t=typename apply_types<target,types>::type; // divide and conquer, recursively: template<unsigned N, class T, class Types=types<>> struct make_types:make_types< (N+1)/2, T, typename make_types<N/2, T, Types>::type > {}; // terminate recursion at 0 and 1: template<class T, class... Types> struct make_types<1, T, types<Types...>>:types<T,Types...> {}; template<class T, class Types> struct make_types<0, T, Types>:Types{}; // alias boilerplate: template<unsigned N, class T> using make_types_t=typename make_types<N,T>::type; // all of the above reduces `repeat_type_N_t` to a one-liner: template<template<class...>class target, unsigned N, class T> using repeat_type_N_times = apply_types_t<target, make_types_t<N,T>>; 对于大型N,上述可以显着减少编译时间,并处理template堆栈溢出。 您不能直接执行此操作。 你可以做这样的事情 template <unsigned N> class UniformTuple; template <> class UniformTuple <0> { }; template <unsigned N> class UniformTuple : public UniformTuple <N-1> { public: template <typename... Args> UniformTuple (double arg, Args... args) : UniformTuple <N-1> (args...) , m_value (arg) { } private: double m_value; }; template <int N> class A { std :: function <void (const UniformTuple <N> &)> func; }; 为了完整起见,这是一个不使用递归的解决方案: template <class Ret, class Arg, class Idx> struct n_ary_function_; template <class Ret, class Arg, std::size_t... Idx> struct n_ary_function_<Ret, Arg, std::index_sequence<Idx...>> { template <class T, std::size_t> using id = T; using type = std::function<Ret(id<Arg, Idx>...)>; }; template <class Ret, class Arg, std::size_t N> using n_ary_function = typename n_ary_function_< Ret, Arg, std::make_index_sequence<N> >::type; 在 Coliru 上观看直播 NoSid 的解决方案非常有创意(本质上是一一“追加”类型)。我编写的另一个解决方案可能需要更少的脑力劳动,如下所示使用 std::index_sequence (这是创建未知大小的参数包的一种非常自然的方法): #include <utility> #include <functional> #include <type_traits> template<typename T, long U> struct reduce { using type = T; }; template<typename U, typename IndexSequence> struct FunctionHolderImpl; template<typename U, long ... Indices> struct FunctionHolderImpl<U, std::index_sequence<Indices...>> { using value = std::function<void(typename reduce<U, Indices>::type...)>; }; template<long N> struct FunctionHolder { using func = FunctionHolderImpl<double, std::make_index_sequence<N>>::value; };

回答 5 投票 0

C# 中的 lambda 表达式/委托是“纯粹的”吗?

我最近询问了没有副作用的函数式程序,并了解了这对于使并行任务变得微不足道意味着什么。具体来说,“纯”函数使这变得微不足道,因为它们...

回答 5 投票 0

为什么这些代码块不能全部工作?

代码#1 此代码有效 (定义*o (λ(xyz) (如果(= y 0) z (*o x (sub1 y) (+ z x))))) (*o 7 3 0) 代码#2 该代码不起作用 (

回答 1 投票 0

无法重现python cdk层zip

我的 lambda 使用请求。我有一个 package.zip 文件,当我使用 cdk 进行部署时,该文件可以正常工作。我尝试了多种方法来重现我拥有的 package.zip 。我尝试过的所有方法都失败了。哦...

回答 1 投票 0

用 STREAM 和 LAMBDA 替换 IF 和 FOR 循环

我想优化我的代码。我曾经使用 for 循环和 ifs,但我知道还有比这更快的方法。我对 lambda 表达式和流还很陌生。为了练习,我决定重新开始...

回答 2 投票 0

方法引用在流的收集方法中不起作用

我正在尝试对列表中的元素进行排序,并使用 java 8 流将其收集并打印在单独的列表中,下面是代码。 工作代码: System.out.println(coursesList.stream() .排序(

回答 1 投票 0

这个嵌套 lambda 函数是如何工作的?

我们如何得到120的输出呢? 我不太明白函数中的 x(y) 是什么。哪些参数被传递到哪个函数? def 组合器(y): 返回 (lambda x: lambda y: x(y))(lambda...

回答 1 投票 0

在键上使用 lambda 函数排序时解构元组

我使用频率(%)和熵(位)。这两个现实非常相似,很容易将它们混淆。 当我有频率/熵元组时,我总是命名元组成员,以便...

回答 1 投票 0

c++ 线程:将线程函数包装在 lambda 中

#包括 #包括 类我的类{ 民众: MyClass(int val) : val_(val) {} int val_{0}; }; void threadFunction(MyClass myObj) { // 做一点事 ... } ...

回答 1 投票 0

用于初始化数组的 Lambda 表达式

有没有办法使用简单的 lambda 表达式来初始化数组或集合? 就像是 // 那这个呢? 人[]人=新人[15]; people = () -> {返回新的 Per...

回答 4 投票 0

有没有办法重构这段RxJava代码?

我的 Observable 订阅如下所示: compotoDisposables.add(githubService.getRepos() .subscribeOn(Schedulers.io()) .observeOn(

回答 2 投票 0

将 C++ lambda 函数转换为 boost 中的类方法函数

我是一名自学成才的 C++ 程序员,试图学习更多知识。 我正在尝试修改位于此处的 boost ssl 示例: https://www.boost.org/doc/libs/1_82_0/doc/html/boost_asio/example/cpp...

回答 1 投票 0

使用 lambda 更新 Tkinter 按钮的文本会导致 Lambda 字符串作为标题弹出

我目前正在使用 tkinter 来进行扑克模拟。我试图给每只手(由卡片按钮代表)一个文本来代表他们有多少钱。下面...

回答 1 投票 0

如何从流中打印匹配元素,如果不存在则使用默认值?

我刚刚开始使用流和 lambda,并且已经弄清楚如何使用流 lambda 而不是 for 循环。 这是我以前的方法: 公共无效findVehicle(){ 系统...

回答 2 投票 0

如何从流中打印匹配元素,如果不存在则使用默认值?

我刚刚开始使用流和 lambda,并且已经弄清楚如何使用流 lambda 而不是 for 循环。 这是我以前的方法: 公共无效findVehicle(){ 系统...

回答 2 投票 0

C# Linq All in Where 条件

我有以下数据库查询: var task = Task.Run(() => _localDatabase.Table().Where(article => 文章.ArticleName!.ToLower().Contains(searchQuery.ToLower())) ...

回答 1 投票 0

有关从页面提取信息的 lambda 代码的基本问题

我正在学习如何将 AWS lambda 与 Node js 18-20 结合使用,但我很难让最基本的示例发挥作用。例如,我有 sparticuz-chromium 109.0.5 模块和 puppeteer

回答 1 投票 0

TypeError:finance_tracker.create_widgets.<locals>.<lambda>()缺少1个必需的位置参数:'col'

我在以下代码中遇到错误 类finance_tracker: def init(自身,根): self.root = 根 self.root.geometry("1000x550") self.root.ressized(False, False) self.root.title('

回答 1 投票 0

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