浏览 4088 次
锁定老帖子 主题:lambda表达式语法思考
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-17
http://www.commontemplate.org)最近实现了简单的lambda表达式功能,但操作符语法未定,
CommonTemplate(可选方案: 1.仿Python,采用“lambda” 如:list[lambda i : i > 0] 符合标准lambda表达式定义格式,但太复杂,不简洁。 2.仿JavaFX,采用“|” 如:list[i | i > 0] 但因为“|”已作为“按位或”运算符,重载操作符优先级可能不对,也易引起歧义。 3.仿C#,采用“=>” 如:list[i => i > 0] 4.隐式变量,也就是规定死命名,假设用“index" 如:list[index > 0] 另外,还需要考虑多个参数的情况: 如:list[item,index | item ~ "[0-9]+" && index > 3] 或:list[item,index => item ~ "[0-9]+" && index > 3] 哪种更合理?最符合思维习惯? 或者还有其它方案? 还有一个问题是,现有方案,与lambda表达式功能重叠,如: 现在的方案: list[1] list[-1] list[1..2] list["value"] // 假设list中放的String对象 list[name="james",role="admin"] // 假设list中放的User对象 用lambda表达式一一替换上面的方案: (假设采用第4种方案,隐含变量:item,index,size) list[index == 1] list[index == size - 1] list[index >= 1 && index <= 2] list[item == "value"] list[item.name == "james" && item.role="admin"] 当然,lambda表达式可以表示更多情况,因为表达式的逻辑完备性很强。 但原方案更直观,简洁。 两者都保留? 更深一步的问题是,现在的lambda表达式表达式是超简化的, 是否应该实现内递归推演? 也就是先前这篇blog所讲的: http://javatar.iteye.com/blog/137037 如果你不太理解lambda表达式,你可以把它简单的看成匿名的回调函数, 而上面讨论的是一个过滤器功能的回调函数,可以类比:File.listFiles(new FileFilter()) list[lambda item,index,size : index > 0] 相当于list回调了一个匿名函数,参数列表为item,index,size, 返回值为index > 0,list根据返回值确定要不要接收这个项。 Java等价写法: subList = list.sub(new Filter() { public boolean filter(Object item, int index, int size) { return index > 0; } }); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |