让函数参与入参与出参
来源:互联网 发布:淘宝店铺如何注销关闭 编辑:程序博客网 时间:2024/04/29 18:21
1.这个语法并不是难点,毕竟C++就可以用指针实现了,所以语法并不是我们的见解部分,我们是要知道该函数的作用!
2.实现入参是个函数,能提供什么,出参又能干什么,这好比把两个水管对接,而该函数正是该桥梁,既然是桥梁,那么我们就做桥梁的事情吧
@1.桥梁可以充当简单的拼接剪切路或加减路长度的功能
我们来拼接路
定义函数FN
1.他接受一个函数,放回另一个函数,所以我们把它type成一种数据("这里只是别名")
type Func[A,B,C] = (A => B) => (B => C)
fn函数
scala> def func1(fc:Func[Int,String,String]){ | val c = fc(_ + " one\n")(" two") | println(c) | }
接着我们定义Func类型的参数
scala> val fn = (f1:Int=>String) => f1(1) + "2" + _fn: (Int => String) => (Any => String) = <function1>
我们测试一下
scala> func1(fn)1 one2 two
2.其实这里看不出蹊跷的地方
我们来设计一个校验权限的简单框架
功能
1.根据所给的名字(可以从数据库获取),来判断用户是否有对应的权限
2.由于后期维护,多人用户拥有对应的权限
这时用该高级函数就容易维护系统了
1.同样定义别名
scala> type Func[A,B,C] = (A => B) => (B => C)defined type alias Func
2.定义权限检查
val fn1 = (f1:String=>String) => f1("Auth:2015.10").endsWith(_)
3.定义fn
scala> def func1(fc:Func[String,String,Boolean]){ | val res = fc(_ + " name0")("0") | res match { | case true => println("name0 has Auth!") | case _ => println("name0 has no Auth!") | } | }
4.测试
scala> func1(fn1)name0 has Auth!
对于2步骤我们可以利用保存log
scala> val fn1 = (f1:String=>String) => {val log = f1("Auth:2015.10");println(log);log.endsWith(_)}fn1: (String => String) => (String => Boolean) = <function1>scala> func1(fn1)Auth:2015.10 name0name0 has Auth!scala>
这样我们就保存了log
几个月后突然老板说要加上一种验证方式,这时我们完全可以
scala> def func1(fc:Func[String,String,Boolean]){ | val res = fc(_ + " name0")("0") | val res1 = fc(_ + " name0")("1") | res match { | case true => println("name0 has Auth _1!") | case _ => println("name0 has no Auth _1!") | } | res1 match { | case true => println("name0 has Auth _2!") | case _ => println("name0 has no Auth _2!") | } | }func1: (fc: Func[String,String,Boolean])Unitscala> func1(fn1)Auth:2015.10 name0Auth:2015.10 name0name0 has Auth _1!name0 has no Auth _2!scala>
或者如果只是一个用户多个权限验证的话
scala> def func1(fc:Func[String,String,Boolean]){ | val res = fc(_ + " name0")("0") && fc(_ + " name0")("1") | | res match { | case true => println("name0 has Auth!") | case _ => println("name0 has no Auth!") | } | }func1: (fc: Func[String,String,Boolean])Unitscala> func1(fn1)Auth:2015.10 name0Auth:2015.10 name0name0 has no Auth!
这里我们用高级函数,让普通函数具备输入函数和输出函数的功能,主要目的是耦合目的是耦合度
0 0
- 让函数参与入参与出参
- 参与
- 指针-形参与实参-函数传参
- 让测试人员参与软件设计
- java 函数传参与final
- Javascript函数形参与实参
- 函数的形参与返回
- Javascript函数形参与实参
- 函数参数——普通形参与引用形参
- 让孩子参与家庭理财的重大决策
- 让孩子参与家庭理财的重大决策
- 函数的形参与实参的关系
- C语言----函数的形参与实参
- 函数的调用:形参与实参
- 1.4a函数的形参与实参
- 函数形参与实参的一些总结
- 参与进来
- 新手参与
- JSTL判断list的size()大小
- strcmp,strcpy 指针法实现
- 常用正则表达式
- js 保存用户7天
- 后台向页面传boolean值,如何用EL表达式获取
- 让函数参与入参与出参
- 关于ajaxfileupload.js插件及其多上传的使用
- [HTML5学习]HTML5课程大纲介绍_工具准备课程
- ICE学习(七)-线程池
- 栈---定义、应用(递归、后缀表达式实现数学表达式求值)
- ArcGIS教程:收缩 (Spatial Analyst)
- iOS 文件下载
- ffmpeg主要数据结构及其之间的关系
- C++浅拷贝、深拷贝及引用计数浅析