C# 和 F# lambda 表达式代码生成

2023-12-29

让我们看一下 F# 为简单函数生成的代码:

let map_add valueToAdd xs =
    xs |> Seq.map (fun x -> x + valueToAdd)

生成的 lambda 表达式(F# 函数值的实例)代码将如下所示:

[Serializable]
internal class map_add@3 : FSharpFunc<int, int> {
    public int valueToAdd;
    internal map_add@3(int valueToAdd) { this.valueToAdd = valueToAdd; }
    public override int Invoke(int x)  { return (x + this.valueToAdd); }
}

查看几乎相同的 C# 代码:

using System.Collections.Generic;
using System.Linq;

static class Program {
    static IEnumerable<int> SelectAdd(IEnumerable<int> source, int valueToAdd) {
        return source.Select(x => x + valueToAdd);
    }
}

以及 C# lambda 表达式的生成代码:

[CompilerGenerated]
private sealed class <>c__DisplayClass1 {
    public int valueToAdd;
    public int <SelectAdd>b__0(int x) { return (x + this.valueToAdd); }
}

所以我有一些问题:

  • 为什么 F# 生成的类没有标记为sealed?
  • 为什么 F# 生成的类包含public字段,因为 F# 不允许可变闭包?
  • 为什么 F# 生成的类有构造函数?它可以用公共字段完美地初始化......
  • 为什么 C# 生成的类没有标记为[Serializable]?为 F# 序列表达式生成的类也变成了[Serializable]而 C# 迭代器的类则不然。

由于它们是编译器生成的,因此密封/公共字段问题有点没有实际意义 - 除了通过调试工具之外,您不应该看到它 - 除了绕过编译器之外,您将如何子类化它或改变它?如果你有that您可以改变它的调试访问级别anyway(通过反射)。

对于 C# 来说,它需要是field允许某些ref / out用法,并允许正确使用捕获的可变结构(是的,邪恶,我们知道)。我假设 F# 在这里是类似的(你可以改变捕获值的 sub-[sub-[sub-]] 成员吗?)。不过,这些成员可能是内部成员。

Re [Serialziable];为什么支撑闭包的东西是可序列化的?代表们是极差的连载候选人。也许 F# 的本质意味着它更适合将操作(中流)持久保存到磁盘 - 但总的来说,我不推荐它。我不期望这些对象(迭代器和捕获类)是可序列化的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 和 F# lambda 表达式代码生成 的相关文章

  • 使用sqlbulkcopy之前如何创建表

    我有一个 DBF 文件 我正在尝试导入该文件 然后将其写入 SQL 表 我遇到的问题是 如果我使用 SqlBulkCopy 它需要我提前创建表 但在我的场景中这是不可能的 因为 dbf 文件不断变化 到目前为止 这是我的代码 public
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • Scala 中的 Apply 和 lambda

    我有下面的代码 scala gt val builder new StringBuilder foo bar baz builder StringBuilder foo bar baz scala gt 0 until 5 foreach
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action

随机推荐

  • Firestore ID 在整个数据库中是否唯一[重复]

    这个问题在这里已经有答案了 我的意思是 如果我们从所有集合和子集合等中收集所有 id 自动生成 它们都是唯一的吗 做什么的 我正在构建一个新功能 用户可以在其中共享子集合中的项目 所以我不确定 我可以在用户子集合之间使用相同的 id 吗 T
  • Laravel 雄辩关系:->latest()

    laravel中latest 的作用是什么 Example public function activity return this gt hasMany App Activity gt with user subject gt lates
  • 如何强制 PHP 使用字符串作为数组键? [复制]

    这个问题在这里已经有答案了 我遇到过一个旧应用程序 它使用 id 来命名类型数组 例如 array 1 280 gt string 3 abc 现在我需要重新排序这些 并且var dump 当键是整数时 这看起来不会发生 如果我添加一个a对
  • 使用 AcquireTokenSilent 刷新 access_token

    我有一个 asp net core MVC 应用程序 它将 access token 传递给下游 API 经过一番努力 我弄清楚了如何使用 MSAL Net 获取 access token 但访问令牌每小时都会过期 因此我必须刷新它 所以我
  • 如何从 Swift 中的 void 闭包返回值?

    我有一个函数可以查询某个用户以访问该用户的数组 我返回用户并且可以访问他们的数组 但是 该调用是异步的 返回的值为零 该函数总体上有一个完成处理程序 但是 内部有一个查询调用 并且默认情况下该查询返回 Void func getAllMat
  • Python在类中调用方法

    我在这里的表现远远超出了我的承受能力 但请耐心等待这位 Python 业余爱好者 我是一名 PHP 开发人员 之前几乎没有接触过这种语言 我想做的是调用类中的方法 听起来很简单吗 我完全困惑于 self 指的是什么 以及在类内部和类外部调用
  • 在 PHP 中将数组元素移动到新索引

    我正在寻找一个简单的函数来将数组元素移动到数组中的新位置并对索引重新排序 以便序列中没有间隙 它不需要使用关联数组 有人对此有想法吗 a array 0 gt a 1 gt c 2 gt d 3 gt b 4 gt e print r mo
  • php 中子类构造函数如何与父类构造函数交互?

    现在 我正在开发两个类用于与 MySQL 数据库交互 一个类扩展了另一个类 他们来了 class DB MySQL protected dbuser protected dbpass protected dbhost protected d
  • 在 Android 模拟器中运行时无法更改 Chrome 自定义选项卡导航栏颜色

    为 Chrome 自定义选项卡指定颜色似乎有点奇怪 您可以指定三种颜色 工具栏颜色 辅助工具栏 颜色和导航栏颜色 似乎有两种方法可以控制这些 一种是直接在 Builder 中设置这三个属性 如下所示 val builder CustomTa
  • MVC-路由,为什么我不能忽略默认值,匹配的路由不包含“控制器”路由值,这是必需的

    我有这个配置 public static void RegisterRoutes RouteCollection routes routes IgnoreRoute resource axd pathInfo routes MapRoute
  • Android 在簇标记上打开 InfoWindow

    我实现了一个选项来查找距离实际位置最近的标记 我在带有自定义信息窗口的 ClusterItem 中拥有所有标记 在没有聚类的普通谷歌地图上我可以使用marker showInfoWindow 然后就会弹出信息窗口 使用聚类时似乎没有这样的方
  • S3 Select 可以搜索多个对象吗?

    我正在测试S3选择 https aws amazon com blogs aws s3 glacier select 据我从示例中了解到 您可以将单个对象 CSV 或 JSON 视为数据存储 我希望每个 S3 对象都有一个 JSON 文档
  • 查找两个日期之间天数的算法

    我正在研究一个学校问题 以找出算法来查找两个给定日期之间的天数 然后在 Java 中实现该算法 感兴趣的算法在这里找到 http www sunshine2k de articles coding datediffindays calcdi
  • PDF 抓取:获取公司和子公司表格

    我正在尝试刮这个PDF https drive google com file d 1kuqjeKl3cESlgth2Pn LY8dxMjqUyoYU view usp sharing包含有关公司子公司的信息 我看过很多使用 R 包 Tab
  • Cakephp 3 回调方法未到达

    我对 afterDelete 回调方法有疑问 我不能使用它们 在我的一个 存储 插件控制器中 我想删除一条记录 然后我想做一些其他的事情 但没有达到回调方法 我已经通过在 afterDelete 回调方法中添加日志消息来检查这一点 这是我删
  • 禁用的单选按钮在回发后失去值

    我有两个单选按钮 在页面加载时使用 javascript 禁用它们 RadioButton1默认情况下处于选中状态 当我单击按钮进行回发时 RadioButton1不再检查 有人知道为什么吗 这是我的代码示例 后面的代码是空的
  • 如何使用 Sikuli 中的“type”函数检查变量类型

    西库里有自己的功能type用于打字 有没有办法调用 python jython 函数type 模块builtins无法导入 我当然可以使用是实例相反 但我只是好奇是否有可能超出 Sikuli 范围并调用不 覆盖 的 python 内置函数t
  • 避免 iOS 浏览器中 204 响应的表单重定向

    我在 hubspot 中创建了一个表单 在 iPhone 和 iPad 等 IOS 设备中 使用 HTTP 204 响应成功发布表单后 页面将重定向到操作 url 但在 Windows 和 Android 中 它仍保留在同一页面中 我们有什
  • BigInteger阶乘的并行计算

    作为 BigDecimal 库的一部分 我需要计算任何给定非负整数的阶乘 所以我使用 Net 4 0System Numerics BigInteger能够存储大量数字 这是我正在使用的函数 private BigInteger Facto
  • C# 和 F# lambda 表达式代码生成

    让我们看一下 F 为简单函数生成的代码 let map add valueToAdd xs xs gt Seq map fun x gt x valueToAdd 生成的 lambda 表达式 F 函数值的实例 代码将如下所示 Serial