使用以下链接列表定义:

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函数?相关推荐

  1. python中编写函数素数_如何用Python编写素数程序?

    成为一个认证的专业素数是一个大于1的自然数,它没有除1以外的任何除数.你可以用Python编写一个代码来帮助你找到所有的素数.在本文中,我们将按照以下顺序在Python中编写一个素数程序:什么是素数? ...

  2. java中负数取余数_数学 - java如何用负数进行模数计算?

    数学 - java如何用负数进行模数计算? 我做模数错了吗? 因为在Java -13 % 64应该评估为-13,但我得到51. 14个解决方案 98 votes 负数模数的两个定义都在使用 - 一些语 ...

  3. java双斜线转义_转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则...

    转义字符将后边字符转义,使特殊功能字符作为普通字符处理,或者普通字符转化为特殊功能字符. 各个语言中都用应用,如java.python.sql.hive.shell等等. 如sql中 "\& ...

  4. java中数组的含义_数组

    数组(Array)是有序的元素序列.[1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数 ...

  5. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  6. Java 基础 | Java 中引用与指针的关系

    前言:关键字包含 #指针,java 引用,空指针,地址访问,引用类型,在 Java 编程语言中,程序员不需要担心程序的内存使用.Java 语言的自动垃圾收集器会不时地清理那些变成垃圾的对象. 如果垃圾 ...

  7. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  8. java中Solution怎么用_【leetcode】solution in java——Easy4

    16:Invert Binary Tree 此题:以根为对称轴,反转二叉树. 思路:看到二叉树,我们第一时间要想到处理二叉树的常用方法--BFS.DFS,更常用的是DFS.此题我们先用BFS来思考:B ...

  9. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

最新文章

  1. PubChem的Python接口PubChemPy
  2. MoviePy - 中文文档4-MoviePy实战案例-把多个clip放置在一个画面中(超美)
  3. php 输出图片给js,如何在php中利用croppic.js对图片进行剪切并上传
  4. 在一个千万级的数据库查寻中,如何提高查询效率?
  5. python练习2 购物车程序
  6. 如何改变控件内的字体颜色?
  7. 同花顺显示正在切换服务器,同花顺服务器架构
  8. mysql省市县三级互动_省市县三级联动的SQL语句
  9. linux下的/usr目录
  10. 将UTC(字符串包含TZ的时间)时间转换成本地时间 python
  11. 每日一面 - Spring Boot 中的 ApplicationContext 的分层是什么意思?
  12. 戴尔g7 linux,颜值高性能强大 戴尔G7游戏本评测详解
  13. 记录导出微信聊天记录到硬盘的过程
  14. RH850从0搭建Autosar开发环境系列讲解 - 总目录
  15. 代码规范:规范你我他
  16. python 重复图片_删除重复文件或图片(去重)的python代码
  17. 国产“芯”时代 盘点国内十大IC卡制卡企业
  18. 俄罗斯方块实验报告(附源码)
  19. ERROR: Command errored
  20. 为什么输入法显示中文打不出中文_搜狗输入法打不出汉字,无法打出汉字的解决办法...

热门文章

  1. 操作日志和系统日志分类记录
  2. gim-实时通讯框架
  3. JavaScript MVC 框架比较
  4. 理解Semaphore及其用法详解
  5. springboot 前缀_SpringBoot2.x 给Controller的RequestMapping添加统一前缀
  6. 压缩与解压缩 与多个安装文件的合并问题
  7. Putty打开.pem加密的服务器
  8. 如何进入服务器文件管理,服务器怎么打开任务管理器
  9. matlab聚合矩阵,c#和ILNumerics与Matlab中最有效的矩阵聚合方式
  10. php不能连接远程mysql_无法远程连接mysql怎么办