Visual Studio Code 中的 F# 入门
您可以使用 Ionide 插件在 Visual Studio Code 中编写 F#,以获得强大的跨平台轻型集成开发环境(IDE)体验,并享受 IntelliSense 和代码重构功能。 请访问 Ionide.io 了解有关插件的详细信息。
注意
在开始之前,请确保已安装 F# 和 Ionide 插件。
使用 Ionide 创建第一个项目
若要创建新的 F# 项目,请打开命令行并使用 .NET CLI 创建新项目:
dotnet new console -lang "F#" -o FirstIonideProject
完成后,切换到项目目录并打开 Visual Studio Code。
cd FirstIonideProject
code .
在 Visual Studio Code 中加载项目后,应会看到窗口左侧的 F# 解决方案资源管理器窗格打开。 这意味着 Ionide 已成功加载刚刚创建的项目。 你可以在此时间点之前在编辑器中编写代码,但发生此情况后,所有内容都已完成加载。
编写第一个脚本
将 Visual Studio Code 配置为使用 .NET Core 脚本后,导航到 Visual Studio Code 中的资源管理器视图并创建新文件。 将其命名 MyFirstScript.fsx。
现在,将以下代码添加到其中:
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string(word[0]) + "ay"
此函数将单词转换为 Pig Latin形式。 下一步是使用 F# Interactive (FSI) 对其进行评估。
突出显示整个函数(长度应为 11 行)。 突出显示后,按住 Alt 键并点击 Enter。 你会注意到屏幕底部弹出一个终端窗口,它应如下所示:
这做了三件事:
- 启动了 FSI 进程。
- 它已将突出显示的代码发送到 FSI 进程。
- FSI 进程评估了你发送的代码。
由于所发送的内容是 函数,因此现在可以使用 FSI 调用该函数! 在交互式窗口中,键入以下内容:
toPigLatin "banana";;
应会看到以下结果:
val it: string = "ananabay"
现在,让我们尝试一个元音作为第一个字母。 输入以下内容:
toPigLatin "apple";;
应会看到以下结果:
val it: string = "appleyay"
该函数似乎按预期工作。 恭喜,你刚刚在 Visual Studio Code 中编写了第一个 F# 函数,并使用 FSI 对其进行了评估!
注意
正如你可能已注意到的,FSI 中的行以 ;;
终止。 这是因为 FSI 允许输入多行。 末尾的 ;;
让 FSI 知道代码何时完成。
说明代码
如果不确定代码实际在做什么,以下是分步骤说明。
正如你所看到的,toPigLatin
是一个函数,它采用单词作为其输入,并将其转换为该单词的 Pig-Latin 表示形式。 此规则如下所示:
如果单词中的第一个字符以元音开头,请在单词末尾添加“yay”。 如果它不以元音开头,请将第一个字符移动到单词末尾,并向其添加“ay”。
你可能在 FSI 中注意到了以下内容:
val toPigLatin: word: string -> string
这表示,toPigLatin
是一个函数,它采用 string
作为输入(称为 word
),并返回另一个 string
。 这称为函数的
在函数正文中,你将注意到两个不同的部分:
一个名为
isVowel
的内部函数,通过模式匹配检查给定字符 (c
) 是否与提供的模式之一匹配,从而可确定该字符是否为元音:let isVowel (c: char) = match c with | 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' -> true |_ -> false
一个
if..then..else
表达式,用于检查第一个字符是否为元音,并基于第一个字符是否为元音从输入字符构造返回值:if isVowel word[0] then word + "yay" else word[1..] + string(word[0]) + "ay"
因此,toPigLatin
的流程如下:
检查输入词的第一个字符是否为元音。 如果是,将“yay”附加到单词的末尾。 否则,请将该第一个字符移到单词末尾,并向其添加“ay”。
关于此方面最后要注意的一点是:在 F# 中,没有从函数返回的显式指令。 这是因为 F# 是基于表达式的,在函数正文中计算的最后一个表达式决定了该函数的返回值。 由于 if..then..else
本身是表达式,因此计算 then
块的主体或 else
块的主体决定了 toPigLatin
函数返回的值。
将控制台应用转换为隐语生成器
本文前面的部分演示了编写 F# 代码的常见第一步:编写初始函数并使用 FSI 以交互方式执行该函数。 这称为 REPL 驱动的开发,其中,REPL 表示“读取-求值-打印循环”。 在你具有可实际工作的内容之前,这是一种非常好的方式来体验功能。
REPL 驱动开发中的下一步是将工作代码移动到 F# 实现文件中。 然后,F# 编译器可以将它编译为可执行的程序集。
首先,打开之前使用 .NET CLI 创建的 Program.fs 文件。 你会注意到,其中已存在某些代码。
接下来,创建名为 PigLatin
的新 module
,并将前面创建的 toPigLatin
函数复制到其中:
module PigLatin =
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string word[0] + "ay"
此模块应高于 main
函数,并且位于 open System
声明下方。 声明顺序在 F# 中很重要,因此在文件中调用函数之前,需要定义函数。
现在,在 main
函数中,对参数调用隐语生成器函数:
[<EntryPoint>]
let main args =
for arg in args do
let newArg = PigLatin.toPigLatin arg
printfn "%s in Pig Latin is: %s" arg newArg
0
现在,可以从命令行运行控制台应用:
dotnet run apple banana
你将看到它输出的结果与脚本文件相同,但这次是正在运行的程序!
Ionide 故障排除
可通过以下几种方法排查可能遇到的某些问题:
- 若要获取 Ionide 的代码编辑功能,需要将 F# 文件保存到磁盘和 Visual Studio Code 工作区中打开的文件夹内。
- 如果已在打开 Visual Studio Code 的情况下更改系统或安装了 Ionide 先决条件,请重启 Visual Studio Code。
- 如果项目目录中的字符无效,Ionide 可能无法正常工作。 如果是这种情况,请重命名项目目录。
- 如果所有 Ionide 命令都不起作用,请检查 Visual Studio Code 键绑定,以查看是否意外地替代了它们。
- 如果 Ionide 在您的计算机上无法正常工作,并且上述任何解决方案都无法解决问题,请尝试删除计算机上的
ionide-fsharp
目录并重新安装插件套件。 - 如果项目加载失败(F# 解决方案资源管理器将显示此内容),请右键单击该项目,然后单击 查看详细信息 以获取更多诊断信息。
Ionide 是由 F# 社区的成员构建和维护的开源项目。 请在 ionide-vscode-fsharp GitHub 存储库中报告问题并随意参与。
还可以在 Ionide Gitter 频道中向 Ionide 开发人员和 F# 社区寻求进一步帮助。
后续步骤
若要了解有关 F# 和语言功能的详细信息,请查看 F#教程。