java中map函数指针_如何用Rust编写合适的map函数?
使用以下链接列表定义:
enum List {
Nil,
Cons(T, ~List)
}
我正在尝试编写一个map函数(即将操作应用于列表的每个元素并返回一个新列表) . 我正在尝试使用教程中提供的指南和其他不同的地方(例如Rust for Rubyists),因此我尝试使用值并借用指针而不是拥有指针 . 这引出了以下函数定义:
fn map(f: |T1| -> T2, xs: &List) -> ~List { ... }
我认为这是有道理的;变换器函数对值起作用,list参数是借用的指针 . 我返回一个拥有的指针,因为我需要使用递归调用的返回值来构造一个值 .
现在,让我们来看看身体:
fn map(f: |T1| -> T2, xs: &List) -> ~List {
match xs {
&Nil => ~Nil,
&Cons(x, ~ref rest) => ~Cons(f(x), map(f, rest))
}
}
这是我的第一次尝试; ~ref 语法有点不直观,但我在教程中找到了它 . 此实现不编译 .
demo.rs:25:15: 25:16 error: cannot bind by-move and by-ref in the same pattern
demo.rs:25 &Cons(x, ~ref rest) => ~Cons(f(x), map(f, rest))
^
demo.rs:25:19: 25:27 note: by-ref binding occurs here
demo.rs:25 &Cons(x, ~ref rest) => ~Cons(f(x), map(f, rest))
^~~~~~~~
error: aborting due to previous error
好吧,显然在进行模式匹配时,内部模式必须具有相同的移动语义,没有混合和匹配 . 让我们尝试在 x 模式之前添加 ref :
fn map(f: |T1| -> T2, xs: &List) -> ~List {
match xs {
&Nil => ~Nil,
&Cons(ref x, ~ref rest) => ~Cons(f(x), map(f, rest))
}
}
demo.rs:25:44: 25:45 error: mismatched types: expected `T1` but found `&T1` (expected type parameter but found &-ptr)
demo.rs:25 &Cons(ref x, ~ref rest) => ~Cons(f(x), map(f, rest))
^
error: aborting due to previous error
再次出错;模式匹配是可以的,但是我没有正确的类型来调用我的闭包 . 使用语法 f(*x) 是非法的,所以我需要更改我的闭包类型以接受借用的指针:
fn map(f: |&T1| -> T2, xs: &List) -> ~List {
match xs {
&Nil => ~Nil,
&Cons(ref x, ~ref rest) => ~Cons(f(x), map(f, rest))
}
}
最后这个版本有效 .
任何人都可以告诉我,这是什么 Map 应该在Rust看起来像?
java中map函数指针_如何用Rust编写合适的map函数?相关推荐
- python中编写函数素数_如何用Python编写素数程序?
成为一个认证的专业素数是一个大于1的自然数,它没有除1以外的任何除数.你可以用Python编写一个代码来帮助你找到所有的素数.在本文中,我们将按照以下顺序在Python中编写一个素数程序:什么是素数? ...
- java中负数取余数_数学 - java如何用负数进行模数计算?
数学 - java如何用负数进行模数计算? 我做模数错了吗? 因为在Java -13 % 64应该评估为-13,但我得到51. 14个解决方案 98 votes 负数模数的两个定义都在使用 - 一些语 ...
- java双斜线转义_转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则...
转义字符将后边字符转义,使特殊功能字符作为普通字符处理,或者普通字符转化为特殊功能字符. 各个语言中都用应用,如java.python.sql.hive.shell等等. 如sql中 "\& ...
- java中数组的含义_数组
数组(Array)是有序的元素序列.[1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数 ...
- 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计
谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...
- Java 基础 | Java 中引用与指针的关系
前言:关键字包含 #指针,java 引用,空指针,地址访问,引用类型,在 Java 编程语言中,程序员不需要担心程序的内存使用.Java 语言的自动垃圾收集器会不时地清理那些变成垃圾的对象. 如果垃圾 ...
- java中io是什么_深入理解Java中的IO
深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...
- java中Solution怎么用_【leetcode】solution in java——Easy4
16:Invert Binary Tree 此题:以根为对称轴,反转二叉树. 思路:看到二叉树,我们第一时间要想到处理二叉树的常用方法--BFS.DFS,更常用的是DFS.此题我们先用BFS来思考:B ...
- java中execution的作用_一文初步了解Java虚拟机
大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...
最新文章
- PubChem的Python接口PubChemPy
- MoviePy - 中文文档4-MoviePy实战案例-把多个clip放置在一个画面中(超美)
- php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传
- 在一个千万级的数据库查寻中,如何提高查询效率?
- python练习2 购物车程序
- 如何改变控件内的字体颜色?
- 同花顺显示正在切换服务器,同花顺服务器架构
- mysql省市县三级互动_省市县三级联动的SQL语句
- linux下的/usr目录
- 将UTC(字符串包含TZ的时间)时间转换成本地时间 python
- 每日一面 - Spring Boot 中的 ApplicationContext 的分层是什么意思?
- 戴尔g7 linux,颜值高性能强大 戴尔G7游戏本评测详解
- 记录导出微信聊天记录到硬盘的过程
- RH850从0搭建Autosar开发环境系列讲解 - 总目录
- 代码规范:规范你我他
- python 重复图片_删除重复文件或图片(去重)的python代码
- 国产“芯”时代 盘点国内十大IC卡制卡企业
- 俄罗斯方块实验报告(附源码)
- ERROR: Command errored
- 为什么输入法显示中文打不出中文_搜狗输入法打不出汉字,无法打出汉字的解决办法...