继续以解一元多次方程割线法为例
下面把闭包作为参数,定义trait泛型:
定义范型,规定该函数的com_fn参数只接受泛型F:Fn(f64)->f64 trait类型


pub fn f_compute<F:Fn(f64)->f64>(com_fn:F,x:f64)->f64{com_fn(x)
}

全部代码如下:

  use std::f64;
pub fn get_next_x(com_fn:impl Fn(f64)->f64,x0:f64,x1:f64)->f64{let res1=&f_compute(&com_fn,x1);let res0=&f_compute(&com_fn,x0);x1-res1*((x1-x0)/(res1-res0))
}pub fn f_compute<F:Fn(f64)->f64>(com_fn:F,x:f64)->f64{com_fn(x)
}pub fn get_fn(i:i32)->impl Fn(f64)->f64{let my_fn=move |x:f64|->f64 {x.powi(i+1)+x.powi(i)-1.0_f64};my_fn
}fn main() {let tol=1e-8_f64;let x0=-10.0_f64;let x1=10.0_f64;let mut x_i:f64;let mut x_isub1:f64;let mut x_iplus1:f64;let mut ans:f64;  let mut finished;let mut fn_comp;for i in 1..20{fn_comp=get_fn(i);x_i=x1;x_isub1=x0;ans=0.0_f64;    finished=false;    for _n in 1..2000 {x_iplus1=get_next_x(&fn_comp,x_isub1,x_i);if (x_iplus1-x_i).abs()<tol {  ans=x_iplus1;finished=true;break;}            x_isub1=x_i;x_i=x_iplus1;}if finished{println!("function{},解:{}",i,ans);        }else{println!("function{},找不到解",i);                  }       }
}
PS F:\learn\rustlearn> rustc learn8.rs                                                                                                                                                                             PS F:\learn\rustlearn> .\learn8.exe                                                                                                                                                                                function1,解:0.6180339887498948
function2,解:0.7548776662466918
function3,解:0.8191725133961645
function4,解:0.0012008970334152279
function5,解:0.8812714616336657
function6,解:0.00001800013706088066
function7,解:0.9115923534820559
function8,解:-0.999999980000001
function9,解:0.9295701282320228
function10,解:-0.9999999998
function11,解:10.000000000244464
function12,解:-0.9999999999979999
function13,解:10.000000000002444
function14,解:-0.9999999999999793
function15,解:10.000000000000027
function16,解:-0.9999999999999999
function17,解:9.999999999999986
function18,解:-1
function19,解:10
PS F:\learn\rustlearn>

rust(13)-闭包作为参数 trait泛型相关推荐

  1. rust(12)-闭包,闭包作为返回值,闭包作为参数

    继续以解一元多次方程割线法为例 use std::f64; pub fn get_next_x(com_fn:impl Fn(f64)->f64,x0:f64,x1:f64)->f64{l ...

  2. rust学习笔记中级篇1–泛型(霜之小刀)

    rust学习笔记中级篇1–泛型(霜之小刀) 欢迎转载和引用,若有问题请联系 若有疑问,请联系 Email : lihn1011@163.com QQ:2279557541 结构体泛型 首先上代码,如何 ...

  3. Rust Closure 闭包解析(匿名函数)

    Rust Closure 闭包解析(匿名函数) 文章目录 Rust Closure 闭包解析(匿名函数) 正文 1. 简单闭包 - 纯粹的匿名函数 2. 捕获上下文 & FnOnce.FnMu ...

  4. 【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )

    文章目录 一.调用闭包 二.闭包默认参数 it 三.代码示例 一.调用闭包 执行 Closure 变量 的 call() 方法 , 可以调用该闭包 ; // 定义闭包变量def closure = { ...

  5. rust(69)-闭包

    1.add.product属于闭包,作为变量值.而compute使用了闭包作为参数. 2.闭包和函数相似,有一个重要的区别,闭包可以捕获外部变量,而函数不行. pub fn compute<My ...

  6. [FxCop.设计规则]13. 定义自定义属性参数的访问属性

    13.     定义自定义属性参数的访问属性 翻译概述: 一个比较无聊的规则,实在看不出在什么情况下,一个开发者会做出违反这条规则的设计.没有别的内容,只是说应该为自定义特性的构造函数中的参数提供一个 ...

  7. 压电陶瓷材料测试需要知道的13个基本参数

    压电陶瓷材料需要知道的13个基本参数 序号 性能参数名称 符号 指 标 允许 公差 P-33 P-41 P-42 P-44 P-51 P-52 P-53 P-61 P-81 1 机电耦合系数 Kp 0 ...

  8. rust笔记13 闭包

    闭包是一个可捕获周围环境的可执行代码片段,基本的几个定义方式如下: fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u3 ...

  9. 【Rust 笔记】09-特型与泛型

    09 - 特型与泛型 Rust 的多态性: 特型(trait) 泛型(generic) 特型:Rust 对接口或抽象基类的实现. 如下写字节的特型 std::io::Write: trait Writ ...

最新文章

  1. java数组中怎么去重_java数组去重怎么弄???大神来解
  2. 如何在 TensorFlow 中用深度学习修复图像?(附论文)
  3. 美国《时代》周刊公布年度25大最佳发明名单
  4. 创建git项目的feature分支以及下载特定分支的仓库代码
  5. NSIS安装制作程序
  6. (转).gitignore详解
  7. 【贯穿】.NET6结合Docker傻瓜式实现容器编排
  8. 2020年python2停止更新_Python核心团队计划2020年停止支持Python2,NumPy宣布停止支持计划表...
  9. 如何能include外键对应的表?向博客园的兄弟请教!
  10. gradle 编译java配置文件_java – 如何在编译时使gradle使用正确的JDK?
  11. android常见布局整理
  12. 用$.getJSON() 和$.post()获取第三方数据做页面 ——惠品折页面(1)
  13. (node:2612) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
  14. delete table 和 truncate table
  15. Spring MVC与Struts2对比
  16. 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
  17. 利用vscode插件C51生成C51的hex文件
  18. 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
  19. multiply defined
  20. 计算机行显示性能调整,win7系统怎么调节为最佳性能模式-win7性能,win7运行速度提高90%...

热门文章

  1. Android RecyclerView使用GridLayoutManager间距设置
  2. 20170804 - 今日技能封装 - Q
  3. 10-线程,进程,协程,IO多路复用
  4. java设计模式--工厂模式
  5. Android NDK的生命周期JNI_OnLoad与JNI_OnUnload(转)
  6. ajax实现二级联动
  7. MySQL DBA面试全揭秘
  8. 这篇文章让我步入了无线时代,感激原创。
  9. 蒟蒻浅谈树链剖分之一——两个dfs操作
  10. python flask 学习与实战