rust(13)-闭包作为参数 trait泛型
继续以解一元多次方程割线法为例
下面把闭包作为参数,定义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泛型相关推荐
- rust(12)-闭包,闭包作为返回值,闭包作为参数
继续以解一元多次方程割线法为例 use std::f64; pub fn get_next_x(com_fn:impl Fn(f64)->f64,x0:f64,x1:f64)->f64{l ...
- rust学习笔记中级篇1–泛型(霜之小刀)
rust学习笔记中级篇1–泛型(霜之小刀) 欢迎转载和引用,若有问题请联系 若有疑问,请联系 Email : lihn1011@163.com QQ:2279557541 结构体泛型 首先上代码,如何 ...
- Rust Closure 闭包解析(匿名函数)
Rust Closure 闭包解析(匿名函数) 文章目录 Rust Closure 闭包解析(匿名函数) 正文 1. 简单闭包 - 纯粹的匿名函数 2. 捕获上下文 & FnOnce.FnMu ...
- 【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
文章目录 一.调用闭包 二.闭包默认参数 it 三.代码示例 一.调用闭包 执行 Closure 变量 的 call() 方法 , 可以调用该闭包 ; // 定义闭包变量def closure = { ...
- rust(69)-闭包
1.add.product属于闭包,作为变量值.而compute使用了闭包作为参数. 2.闭包和函数相似,有一个重要的区别,闭包可以捕获外部变量,而函数不行. pub fn compute<My ...
- [FxCop.设计规则]13. 定义自定义属性参数的访问属性
13. 定义自定义属性参数的访问属性 翻译概述: 一个比较无聊的规则,实在看不出在什么情况下,一个开发者会做出违反这条规则的设计.没有别的内容,只是说应该为自定义特性的构造函数中的参数提供一个 ...
- 压电陶瓷材料测试需要知道的13个基本参数
压电陶瓷材料需要知道的13个基本参数 序号 性能参数名称 符号 指 标 允许 公差 P-33 P-41 P-42 P-44 P-51 P-52 P-53 P-61 P-81 1 机电耦合系数 Kp 0 ...
- rust笔记13 闭包
闭包是一个可捕获周围环境的可执行代码片段,基本的几个定义方式如下: fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u3 ...
- 【Rust 笔记】09-特型与泛型
09 - 特型与泛型 Rust 的多态性: 特型(trait) 泛型(generic) 特型:Rust 对接口或抽象基类的实现. 如下写字节的特型 std::io::Write: trait Writ ...
最新文章
- java数组中怎么去重_java数组去重怎么弄???大神来解
- 如何在 TensorFlow 中用深度学习修复图像?(附论文)
- 美国《时代》周刊公布年度25大最佳发明名单
- 创建git项目的feature分支以及下载特定分支的仓库代码
- NSIS安装制作程序
- (转).gitignore详解
- 【贯穿】.NET6结合Docker傻瓜式实现容器编排
- 2020年python2停止更新_Python核心团队计划2020年停止支持Python2,NumPy宣布停止支持计划表...
- 如何能include外键对应的表?向博客园的兄弟请教!
- gradle 编译java配置文件_java – 如何在编译时使gradle使用正确的JDK?
- android常见布局整理
- 用$.getJSON() 和$.post()获取第三方数据做页面 ——惠品折页面(1)
- (node:2612) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
- delete table 和 truncate table
- Spring MVC与Struts2对比
- 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
- 利用vscode插件C51生成C51的hex文件
- 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
- multiply defined
- 计算机行显示性能调整,win7系统怎么调节为最佳性能模式-win7性能,win7运行速度提高90%...