F# 入门(八): 值类型/引用类型

F# 入门(二):安装和使用 现在F#是VisualStudio2010默认的一部分,如果你已经装了VS2010,那么你可能已经装了F#。如果已经装了VS2010却没有看到F#,那么你要确认你装了F#安装包。可以通过控制面板中的添加/删除程序添加F#包(如下图): 如果你不是一个VS用户或者正在使用VS2008,那么你要下载单独的F#包,首选MSDN上的F#资源:http://msdn.microsoft.com/f 阅读详情

总得来说,数据值存储在栈上面的称为值类型,而数据值存储在堆上面的称为引用类型。

对于F#而言,每个声明的值都会在创建时被初始化,因为在函数式的编程中,值被声明后就是不可变的。下面看看怎么获取某个值的情况:

Unchecked.defaultof<'a>

获取'a的默认值

typeof<'a>

返回描述'a的System.Type对象

sizeof<'a>

返回'a在栈上的空间大小

在F#中,默认所有值是不能更改的,那么怎么样来改变一个值呢,一个方法是用Ref引用单元(主要用于引用类型的更改),还有用mutable关键字(主要用于值类型的更改),下篇会讲关于mutable。

这里使用ref将值变为引用类型,同时,使用!读取引用类型的值,使用:=写入引用类型的值。让我们来看看例子:

1)

//将引用类型的值绑定给变量a

> let a = ref "hello";;

val a : string ref = {contents = "hello";}

//读取a的值

> !a;;

val it : string = "hello"

//写入a的值然后显示

> a := "world";;

val it : unit = ()

> !a;;

val it : string = "world"

2)

//对于引用类型改变值

> let Days =

    ref [ "Monday"; "Tuesday";

          "Wednesday"; "Thursday";

          "Friday";  "Saturday";

          "Sunday";]

//过滤掉星期天

// 通过(!)获取Days的,再通过(:=)赋予新的值

Days := !Days |> List.filter(fun d -> d <> "Sunday");;

val Days : string list ref =

  {contents =

    ["Monday"; "Tuesday"; "Wednesday"; "Thursday"; "Friday"; "Saturday"];}

F# 入门(五):F# 代码结构及编译顺序 F#与C#/java/C++的代码区域划分有很大的不同,它是靠行缩进来区别不同的代码作用域的。F#编译器编译文件的顺序是垂直从上到下,就如之前说的F#代码文件都是有上下顺序的,如图: 这个项目下有两个文件,如果"Program.fs"想要引用"Helper.fs"里的代码,那么"Helper.fs"文件必须在"Program.fs"上面,不然会出现未定义错误。这里可以通过选中该文件,然后用" 阅读详情

相关推荐

Zipformer实战:5分钟快速搭建语音识别模型(附LibriSpeech测试结果)

本文提供了一份详细的Zipformer语音识别模型实战指南。通过清晰的步骤,指导读者在5分钟内完成从环境配置、LibriSpeech数据集准备到模型训练与测试的全过程。文章重点解析了关键配置参数,并分享了在LibriSpeech测试集上的性能结果,帮助开发者快速评估和应用这一高效的语音识别架构。

weixin_35578748的博客 162

Fsharp 类中的空字段

fsharp设计之初就尽可能的避免使用null。在我的编程经验中null真是个错误之源,垃圾代码之源,95%的系统奔溃之源。其实在设计之初就应该考虑你的系统需要null表现什么?是未初始化的状态,还是一个未知状态,或者就是一个空状态。这些歧义性造成一个值可能被随心所欲的误用。所以如果没有强有力的约束还是尽可能的少用为妙。 但fsharp还需要和别的系统进行交互,也必不可少需要与null值进行交互...

weixin_30702413的博客 138

【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)...

ABC集团SAP的系统平台已经扩展到全球一百来个国家和地区,SAP系统平台的全球实施项目中, 当时是需要支持当地的业务和法律法规的合规要求。   当时客户也是缺乏当地的资源以及对当地法律法规和业务实践的了解,需要团队提供了全球化的支持,通过我们全球产品技术专家充分传递了各区域的本地化支持和实践 而且近年来我们发现一些国家和政府,陆续都在推出一些新的税改和合规的要求,接下来基于这些要求,我们全球...

weixin_34024034的博客 1143

F#入门-第二章 F#基础-第十节 引用类型

F#入门-第二章 F#基础-第十节 引用类型

LuLingNiu的专栏 518

CodeBuddy 接入 MCP,一键生成网站!

2024 年 11 月,Anthropic 公司搞了个挺有意思的新玩意 - Model Context Protocol(模型上下文协议)简称为 MCP 协议。简单来说,它就是给 AI 和各类工具数据之间搭了个标准化的”桥梁”,让开发者不用再为对接问题头疼了。mcp.so如下图所示,这是 mcp.so 网站中的 MCP Server。使用百度/高德地图分析旅线计算时间接 Puppeteer 自动操作网页使用 Github/Gitlab 让大模型接管代码仓库。

悟空聊架构的专栏 1946

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 556

JavaScript里的值类型和引用类型

JavaScript里的变量类型按存储方式分为值类型和引用类型。 如果是引用类型,则比较的是地址。 console.log([1,2] === [1,2]) //false console.log({1:'1'} === {1: '1'}) //false 如果是值类型,则比较的是内容。 console.log(1 === 1) //true 举例验证: ...

EmotionComputer 252

WSL2部署Cadence Virtuoso IC25.1:Ubuntu 26.04排障实录

WSL2以轻量虚拟机结合完整Linux内核,为Windows桌面环境提供了原生级Linux运行能力,解决了传统虚拟机资源开销大、双系统切换低效的问题。对于依赖X11图形协议、FlexNet许可服务和特定动态库的EDA工具链而言,利用WSL2部署Linux发行版需要关注系统集成、显示通路与许可连通性。从技术原理看,图形层X Server的配置、动态库依赖的补齐以及license服务的主机名解析,共同构成EDA工具在WSL2中稳定运行的关键环节。在芯片设计场景中,设计工程师常需在Windows办公机与Linux

weixin_29597551的博客 211

Java编程思想读书笔记(一)第1~13、16章

目录: Java编程思想(一)第1~13、16章 Java编程思想(二)第14章-类型信息 Java编程思想(三)第15章-泛型 Java编程思想(四)第17章-容器深入研究 Java编程思想(五)第18章-Java IO系统 Java编程思想(六)第19章-枚举类型 Java编程思想(七)第20章-注解 Java编程思想(八)第21章-并发 第1章 对象导论 1.1

leonliu06的博客 4万+

【点云数据集】整理汇总(自用,更新ing)

涵盖了各种不同的城市场景:教堂、街道、铁路轨道、广场、村庄、足球场、城堡等等。邮件地址:dmich-request@graphics.stanford.edu,内容需包含:1. 您的姓名、头衔或职位,以及所在机构或隶属关系;license比较难获取,目前可获取的人员:(1)目前隶属于大学、工业研究实验室或其他主要机构的已发表过研究成果的研究人员;普林斯顿 ModelNet 项目的目标是为计算机视觉、计算机图形学、机器人技术和认知科学领域的研究人员提供全面、干净的物体 3D CAD 模型集合。

weixin_44392103的博客 797

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

(三)引用类型数组的初始化

之前的博客《深入数组--内存中的数组》中用图解的方式展示了普通数组在内存中是怎么存储的,本篇将以同样的方式说明引用类型数组在内存中是如何存储的。 案例: class Person{ public String name;//名字 public int age;//年龄 public void info(){ System.out.println("我

一揽芳华 3121

Flutter 自适应布局一套代码适配手机和平板(12)

通过LayoutBuilder组件动态检测屏幕尺寸,根据宽度阈值(600px)选择不同布局方式。在小屏幕上显示单页联系人分组,大屏幕采用侧边栏+详情面板的并排布局。核心实现包括:1)使用LayoutBuilder获取父容器约束条件;2)定义大屏幕和小屏幕的布局断点;3)构建响应式界面组件,其中大屏幕布局采用Row横向排列固定宽度侧边栏和弹性宽度的详情区域。这种方案可确保应用在不同设备上都能提供最佳显示效果。

hello.reader 317

F# 入门(八):值类型/引用类型

总得来说,数据值存储在栈上面的称为值类型,而数据值存储在堆上面的称为引用类型。 对于F#而言,每个声明的值都会在创建时被初始化,因为在函数式的编程中,值被声明后就是不可变的。下面看看怎么获取某个值的情况: Unchecked.defaultof<'a> 获取'a的默认值 typeof<'a> 返回描述'a的System.Type对象 sizeof<'a&g...

weixin_34233856的博客 85

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

F# 入门

作 为 Microsoft® .NET Framework 家族的新成员,F# 提供类型安全、性能以及类似脚本语言的工作能力,所有这些都是 .NET 环境的一部分。此函数式语言由 Microsoft 研究院的 Don Syme 发明,作为 CLR 的 OCaml 语法兼容变体,但 F# 已经迅速地从科研转为投入实际应用。随着函数式编程的概念通过 .NET

Jackie 的专栏 2809

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

F#入门学习(八)

在程序设计中,经常需要检查某值是否在一个范围内,这个范围我们称为模式,比对的过程叫模式匹配。用我们之前学的表达式可以完成,这里用一种更方便的表达式 match表达式 match 测试表达式 with | 模式1 [when条件] ->结果表达式1 | 模式2 [when条件] ->结果表达式2 |… 必须包含所有情况,否则报错,最后可以用_来表示剩下的所有情况。 直接上代码体会。 ...

I_AM_KK的博客 381

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

F# 入门(十):mutable关键字

F#中的变量的值在声明初始化后就不可以被修改了。 但如果想使用可变的变量时,用mutable关键字修饰变量就可以被修改了。   使用mutable关键字声明变量后,使用 下面我们来看一些例子。 // 定义一个可变整形变量,初始值为1,改变值后为10 > letmutable num = 1;; valmutable num : int = 1 >num;; val it :int

fsharp_net的专栏 935

F#快速入门资料

The basic syntax of F# - keywords and constructsThe basic syntax of F# - classes, interfaces, and membersThe basic syntax of F# - typesF# function types: fun with tuples and curryingDiscrimi

莫等闲 5394

【F#初学者】第一讲 F#简介&&&第一个F#程序

F#初学者系列,介绍了F#的优势和编写了第一个程序

scixing的博客 1128

F#入门-目录

F#入门-目录

LuLingNiu的专栏 805

F# 入门(六):F#中的 for/while循环

首先我们来看看F#中基本的for循环编写方法。 for循环 for语句1 := for 循环变量 = 表达式1 to 表达式2 do 表达式3 done for语句2 := for 循环变量 in 表达式4 do 表达式5done for语句1有点c语言的风格。 for语句2就是一般所说的foreach循环,类似于C#,不过功能更强大。   下面我们来看看第一种for循

fsharp_net的专栏 1359

F#语言的学习路线

F#语言是由Microsoft开发的一种多范式编程语言,基于ML语言并受到了OCaml的影响。它的设计初衷是为了提高程序的表达能力并简化开发流程。高度的抽象能力:F#支持高阶函数和强大的类型系统,可以创建简洁且易于维护的代码。无状态编程:函数式编程强调不可变性,使得更易于并发编程,降低了状态管理的复杂度。与.NET的兼容性:F#可以与其它.NET语言(如C#、VB.NET)无缝集成,使用.NET框架的各种库。

2501_90571241的博客 1501

F# 入门(三):F# 基础数据类型

类型检查可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器进行语义分析中进行的。如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此语言为强类型,反之称为弱类型。F#使用的是静态类型检查。这意味着,如果你传入一个string 值给 类型为int的变量,那么你将得到一个编译错误。 下面是F# 中一些数据类型: 你可以通过let关键字来定义值,

fsharp_net的专栏 1990

F#语言入门之什么是F#语言

F#是一种函数式编程语言,可以轻松编写正确且可维护的代码。 F#编程主要涉及定义类型推断和自动泛化的类型和函数。 这使您可以将焦点保留在问题域上并操纵其数据,而不是编程的细节。 open System // Gets access to functionality in System namespace. // Defines a function that takes a name an...

u012525929的博客 9840

在Visual Studio中入门F#

安装 F#创建一个控制台应用程序编写您的代码运行您的代码使用 F# Interactive 在 Visual Studio IDE 中支持 F# 和 Visual F#。在开始前,如果您还没有下载 Visual Studio 的话,我们应该先下载它。本文使用 Visual Studio 2017 Community 版本,您当然可以用您选择的版本来使用 F#。   安装 F#

n9nzjx57bf的博客 738
上一篇: F# 入门(七): 匿名函数
下一篇: F# 入门(九): Seq序列
fsharp_net
博客等级 码龄15年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值