8.2.3.1 可变状态使用引用单元

728 篇文章 1 订阅
349 篇文章 0 订阅

8.2.3.1 可变状态使用引用单元

 

要回答这个问题,我们需要能够创建一些要捕获的状态。一个方法是用 let mutable,但是,这样,并不能运行,因为这种可变值只能用于局部,不能被闭包捕获。

第二个方法是使用引用(ref)类型创建可变值,即引用单元(reference cell)的缩写,它是能够包含可变值的小对象(实际上,声明为 F# 的记录类型)。要理解引用类型的原理,我们在 C# 中定义同样的类型,可以看到,相当简单:

 

class Ref<T> { 

  public Ref(T value) { Value = value;} 

  public T Value { get; set; } 

}

 

这里最重要的是 Value 属性是可变的,所以,当我们创建了一个不可变的 Ref<int>类型的变量时,仍然可以改变它代表的值。清单 8.8 是在 F# 中使用引用单元的例子,显示了相当于 C# 使用Ref<T> 类型的代码;在 F# 中,不直接访问类型,因为有一个函数,也叫 ref,创建引用单元,以及设置和读取值的两个运算符。

 

清单 8.8 在 F# 和 C# 中使用引用单元

F# Interactive

C#

let st = ref 10

st := 11 

printfn "%d" (!st)

var st = new Ref<int>(10);

st.Value = 11; 

Console.WriteLine(st.Value);

 

第一行,我们创建了一个包含整数的引用单元,如同刚刚在 C# 中声明的 Ref<T>  类型一样,F# 的 ref 类型是泛型的,所以,我们可以用它来保存任何类型的值;接下来的两行演示了使用引用单元的运算符:赋值(:=)和取消引用(!),F# 的运算符对应于设置和读取属性值,但语法更便利。

 

[

在 F# 4.0 中,对可变值的使用进行了简化。

在 F# 中,虽然值默认是不可变的,但是,可变值也是是允许的。过去,关键字 mutable用于说明可变值使用栈,这种值使用 <- 运算符进行修改;如果可变值是由闭包捕获的,那么值就使用堆,需要使用ref 语法,愈发值是通过 := 运算符。

这些语法上的差异既使代码不优雅,也让开发人员困惑,很难弄清楚到底应该使用哪一种方法。

现在,使用 F# 4.0,开发人员只要用一个关键字 mutable,就能搞定所有可变值,余下的工作由编译器完成:如果可能,就在栈上创建变,否则,隐式转换成引用单元。

对于非常了解栈、堆语有钱人高级用户,能够启用警告 3180(在 fsc.exe 或 fsi.exe 中,使用 --warnon:3180),当 mutable 声明隐式转换成 ref 时,会发出通知。

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
### 回答1: ikvm-8.2.4630.5是一种Java虚拟机(JVM)的版本。IKVM是一个在Java和.NET平台上提供相互操作的工具。它允许在Java虚拟机执行.NET代码以及在.NET环境执行Java代码。 ikvm-8.2.4630.5是ikvm项目的一个版本号,其8.2表示主要版本号,4630表示次要版本号,而5表示修订版本号。这个版本的ikvm提供了一些新的功能和bug修复,以提高其性能和稳定性。 使用ikvm-8.2.4630.5,开发人员可以在Java和.NET之间进行无缝集成和交互。它提供了对Java类的透明访问,并允许从Java代码调用.NET库以及从.NET代码调用Java类。这为开发人员提供了更多的选择和灵活性,使他们能够在一个统一的平台上结合使用两种不同的技术。 此外,ikvm-8.2.4630.5还提供了一些性能优化和改进,以提高代码的执行效率和响应能力。它还修复了一些已知的bug,使工具更加可靠和稳定。 总的来说,ikvm-8.2.4630.5是一个功能强大的版本,它为Java和.NET开发人员提供了一个方便的工具,使他们能够在两种平台之间进行平滑的集成和交互。 ### 回答2: ikvm-8.2.4630.5是一种Java虚拟机(JVM)和.NET桥接技术,它允许Java程序在.NET平台上运行。它提供了一个Java环境,使Java代码可以编译为间语言(IL),并在.NET运行时环境执行。 在ikvm-8.2.4630.5,它具有许多功能和优势。首先,它提供了一个高度兼容的Java虚拟机,可以在主流操作系统上运行,如Windows、Linux和Mac OS。这使得开发人员可以使用他们熟悉的开发工具和流程来开发和测试Java应用程序。 其次,ikvm-8.2.4630.5允许Java和.NET代码之间实现互操作性。这意味着可以在Java和.NET之间共享代码库,使开发人员能够更容易地在两个平台之间迁移和整合现有的代码。 此外,ikvm-8.2.4630.5还提供了对Java的全面支持,包括Java的核心类库和标准API。这意味着开发人员可以使用各种Java库和框架来构建他们的应用程序,而无需担心与.NET的兼容性问题。 最后,ikvm-8.2.4630.5还具有良好的性能和可靠性。它使用了优化的JIT(Just-In-Time)编译器和垃圾回收器,在执行Java代码时提供了高效的运行时性能,并确保了资源的正确释放。 总而言之,ikvm-8.2.4630.5是一个强大而灵活的工具,它使Java开发人员能够在.NET平台上开发和运行Java应用程序,并实现Java与.NET的互操作性。它是为了帮助开发人员更好地利用现有资源和知识,提高开发效率和代码重用性。 ### 回答3: ikvm-8.2.4630.5是一种开源的Java虚拟机实现。它是IKVM.NET项目的一部分,用于在CLI和Java之间提供互操作性。 IKVM.NET是一个跨平台的开源项目,旨在让Java和CLI(Common Language Infrastructure)平台之间实现互操作性。它将Java字节码转换为CLI间语言(IL),然后在CLI运行时环境执行。因此,IKVM.NET允许在CLI平台上运行Java代码,并且可以使用CLI语言(如C#)与Java代码进行交互。 ikvm-8.2.4630.5版本是IKVM.NET的一个特定版本,它有特定的功能和改进。通过使用这个版本,开发人员可以利用IKVM.NET提供的互操作性特性来集成Java代码和CLI平台上的.NET代码。例如,可以调用Java库或应用程序,从Java代码调用.NET程序集或类,并从Java和CLI代码之间共享数据。 此外,ikvm-8.2.4630.5版本可能还包含了一些修复bug和改善性能的更新。因此,如果您使用这个版本,可能会获得更好的稳定性和性能。 总结来说,ikvm-8.2.4630.5是IKVM.NET项目的一个版本,它实现了Java和CLI平台之间的互操作性。通过使用这个版本,开发人员可以在CLI平台上运行Java代码,并与CLI语言进行交互,从而为他们的项目带来更多的灵活性和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值