6.8.2 列表的绑定操作

6.8.2 列表的绑定操作

 

我们只讨论了选项值的绑定(bind)操作,实际上,它是非常重要的函数式操作,我们将在第十二章介绍。清单 6.26 显示了对选项值绑定操作的类型签名,以及如果我们定义列表的绑定操作,它的类型签名。

 

清单 6.26 绑定操作的签名 (F#)

Option.bind : ('a -> 'b option) -> 'aoption -> 'b option

List.bind : ('a -> 'b list) -> 'alist -> 'b list

 

在 F# 库中有List.bind 函数,但名字不同,因此,我们尝试从类型签名弄清楚它能做什么。输入是列表,处理列表中的每个元素,可能得到其他类型值的列表;这个类型的列表也是个绑定操作的返回结果。

实际上,这就表示,操作对每个元素调用给定的函数,将从函数返回的列表连接起来;在F# 库中,这个函数称为 List.collect;在 LINQ 中也有类似的操作,对于特殊类型的查询非常重要。我们将在第十二章详细讨论。

我们可以使用 List.collect 函数,从给定的目录列表中得到所有文件的列表;注意,一个目录通常包含一个文件列表。清单 6.27 显示了我们如何列出这一章所有的源代码文件。

 

清单 6.27 使用集合列出文件 (F# Interactive)

 

> open System.IO;;

> let directories =

    [ "C:\Source\Chapter06\Chapter06_CSharp";

      "C:\Source\Chapter06\Chapter06_FSharp";

      "C:\Source\Chapter06\FunctionalCSharp" ];;

val directories : string list

 

> directories |> List.collect (fun d–>

    d |> Directory.GetFiles           | 得到给定目录的文件名列表

      |> List.ofSeq                 |

      |> List.map Path.GetFileName );; |

val it : string list =

  ["Chapter06_CSharp.csproj"; "Program.cs";"Chapter06_FSharp.fsproj";

   "Script.fsx"; "FunctionalCSharp.csproj";"List.cs";

   "Option.cs"; "Tuple.cs" ]

 

集合(collect)操作对输入列表中的每个目录调用给定的 lambda 函数;然后,lambda 函数获得目录中的所有文件,把它们从数组转换成列表,再使用 List.map,从完整路径得到文件名;然后,结果会收集到一个列表中,作为整体的结果返回。当你听到在 .NET 3.5 中也有这个操作,可能不会感到诧异,它表示为 SelectMany 方法;在 C# 3.0 的查询表达式中,指定多个 from 子句,就要使用这个方法。

### 安装 Qt 6.8.2 的方法 要在 Ubuntu 系统中安装 Qt 6.8.2,可以按照以下方式操作: #### 准备工作 确保系统已更新至最新状态,并安装必要的依赖项。运行以下命令以准备环境: ```bash sudo apt update && sudo apt upgrade -y sudo apt install build-essential libgl1-mesa-dev libx11-xcb-dev libxcb-keysyms1-dev \ libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev \ libxcb-render-util0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev flex bison gperf \ libegl1-mesa-dev libdrm-dev libgbm-dev git cmake perl python3-pip python3-setuptools pkg-config ``` #### 解压源码包 下载 `qt-everywhere-src-6.7.3.zip` 并解压缩到目标目录。假设文件位于 `/home/user/downloads/qt-everywhere-src-6.7.3.zip`,执行以下命令将其解压: ```bash unzip /home/user/downloads/qt-everywhere-src-6.7.3.zip -d /opt/ cd /opt/qt-everywhere-src-6.7.3 ``` #### 配置编译参数 进入解压后的源码目录并配置编译选项。对于 ARM64 架构的支持,需指定交叉编译工具链路径以及目标平台架构。 以下是典型的配置命令示例: ```bash ./configure -prefix /usr/local/Qt-6.7.3-arm64 \ -release -opensource -confirm-license \ -nomake examples -nomake tests \ -device linux-aarch64-gnu-libc \ -sysroot /path/to/sysroot-for-arm64 \ -platform linux-g++ \ -xplatform linux-aarch64-gnu-libc \ -skip webengine \ -no-feature-concurrent \ -reduce-relocations \ -optimized-qmake \ -vulkan-support \ -opengl es2 \ -no-use-gold-linker ``` 上述命令中的 `-sysroot` 参数应指向适合的 ARM64 工具链根目录[^1]。 #### 编译与安装 完成配置后,启动编译过程。此步骤可能耗时较长,具体时间取决于硬件性能。 ```bash cmake --build . --parallel $(nproc) sudo make install ``` #### 添加新版本到 Qt Creator 为了使 Qt Creator 支持刚安装的 Qt 版本,打开 Qt Creator 后切换到 **Tools > Options > Kits > Qt Versions** 页面,点击 **Add** 按钮,导航至安装路径下的 `bin/qmake` 文件位置(例如 `/usr/local/Qt-6.7.3-arm64/bin/qmake`)。确认无误后保存设置[^3]。 --- ### 注意事项 尽管引用提到的是基于特定版本的操作指南,但核心流程适用于其他相近版本如 Qt 6.8.2。实际应用过程中可根据需求调整模块选择或功能启用情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值