groovy DSL -- Named Paramerter

摘要: 第一刀: 命名参数groovy中的参数列表可以被命名, 明明有啥好处呢? 初步来看就是你不需要记住参数的顺序了def foo(param) { println "${param.a}, ${param.b}, ${param.c}"}foo a:1, b:2, c:3foo b:2, c:3, a:1 //跟上面一句的调用结果是相同的然而还不止如此, groovy甚至比你想象的更聪明def bar(p1, p2, p3) { assert p1.a == 1 assert p1.b == 2 assert p1.c == 3 assert p2 == "p2&qu 阅读全文
posted @ 2012-08-08 16:40 nixil 阅读(366) 评论(0) 推荐(0) 编辑

Scala中的call-by-name与call-by-value

摘要: 在scala中函数的参数有两种定义方式分别叫做call-by-name和call-by-value, 例如下面的两个函数定义, 他们都接受一个函数block作为参数, 循环10次打印传入函数(block)的运行结果 def callByName[T](block: => T) = { for( i<-0 until 10){ println(block) } } def callByValue[T](block: T) = { for( i<-0 until... 阅读全文
posted @ 2012-05-31 10:49 nixil 阅读(1445) 评论(0) 推荐(2) 编辑

scala解惑: 偏函数与部分应用函数

摘要: scala中有PartialFunction的概念, 同时还要一个概念叫Partial Applied Function. 前者译作偏函数, 后者译作"偏应用函数"或"部分应用函数", 一字之差, 差距很大.首先偏函数是个数学概念, 偏函数不是"函数"的一种, 而是一个跟函数平行的概念. 定义可参考wikihttp://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0, 它是指定义域X中可能存在某些值在值域Y中没有对应的值.scala可以通过模式匹配来定义偏函数, 下面这两种方式定义的函数, 都可以认为 阅读全文
posted @ 2012-05-16 12:00 nixil 阅读(4575) 评论(1) 推荐(0) 编辑

Scala能比Java简洁多少?

摘要: 直接用代码来说明吧实例一:快速排序 def quickSort(array:List[Int]): List[Int] = { if (array.size <=1 ) array else { val p = array( array.length / 2) quickSort(array.filter ( _ < p)) ::: array.filter( _ == p) ::: quickSort(array.filter(_ > p)) } }实例二: 找出数组中出现次数最多, 且数字最大的... 阅读全文
posted @ 2012-05-11 15:08 nixil 阅读(515) 评论(0) 推荐(0) 编辑

Spring MVC中使用自定义TemplateLoader对freemarker模板做全局html转义

摘要: freemarker作为"通用"模版引擎, 默认情况下不会对model中的值进行html转义, 然而在web项目中, 为了防止跨站脚本攻击等问题, 必须在对model中的值进行转义. 解决办法:方法1. 是使用 ${x?html} 可以用于对单个值的转义方法2. 使用<#escape x as x?html> ... </#escape> 将需要转义的html代码包起来, 这样其中所有的值都会被转义了.毫无疑问这两个方法都需要大量的重复操作, 如果我所有的模板都需要转义, 有没有一劳永逸的办法呢?方法3. 使用自定义TemplateLoader首先我 阅读全文
posted @ 2012-04-23 14:10 nixil 阅读(4173) 评论(0) 推荐(0) 编辑

JavaScript Puzzle 之 变量作用域

摘要: var a = 10;(function(){ alert(a); var a = 20;})();请看上面这段代码, 猜测一下alert出来的是什么呢? 答案可能出乎意料是undefined! 当然如果你弄清除了js的作用域和变量解析机制, 也就能够理解了. 大家都知道js是解释执行的, 但并不是简单的按顺序一行行执行, 而是以块(block)为单位, 边解析边执行. 那么在解析这个块的时候, 会将变量声明操作提到块的最前面. 所以上面的代码其实是等同于var a = 10;(function(){ var a; alert(a); a = 20;})();这样一来也就十分明了了,... 阅读全文
posted @ 2012-04-16 16:59 nixil 阅读(245) 评论(0) 推荐(0) 编辑

play framework 在 IDEA 11中debug

摘要: IDEA 11 集成了对Play 的支持,运行play idealize生成idea的项目文件并导入之后,即可以直接在IDEA中使用Play的console. 这样就免去了之前版本的IDEA中运行Play的一些麻烦。但是文档中没有提到如何调试。其实很简单,我们在dev模式下运行Play的时候会看到这一行提示信息: Listening for transport dt_socket at address: 8000所以我们只需要配置一个remote debug就可以了。具体方法如下菜单Run -> Edit Configuration 打开之后点击 “+” 号,选择Remote 然后Set 阅读全文
posted @ 2012-02-23 09:54 nixil 阅读(1442) 评论(0) 推荐(0) 编辑

play!framework http method override

摘要: 由于html的form表单action属性只支持post和get,许多支持rest的web框架都做了一些绕过的方法,比如spring mvc3.0中REST的解决方法是在form中添加一个隐藏字段<input type="hidden" name="_method" value="PUT">这样子。在Play!framework中也能通过类似的方法,来通过form表单提交PUT,DELETE请求,具体方法就是在action的url后面加上一个参数 x-http-method-override<form action= 阅读全文
posted @ 2012-02-14 09:58 nixil 阅读(445) 评论(0) 推荐(0) 编辑

Scala 练习:Timesheet

摘要: package sanguo.timesheetimport helpers._abstract class Project(val name: String, val rate: Int)case class BillableProject(override val name: String) extends Project(name, 1)case class SIPProject(override val name: String) extends Project(name, 0)case class Holiday() extends Project("休假", 0 阅读全文
posted @ 2012-01-29 15:56 nixil 阅读(295) 评论(0) 推荐(0) 编辑

Scala Swing 之使用 FileChooser

摘要: import scala.swing.Buttonimport scala.swing.FileChooserimport scala.swing.FlowPanelimport scala.swing.MainFrameimport scala.swing.SimpleGUIApplicationimport java.io.Fileimport scala.swing.event.ButtonClickedimport scala.swing.Labelobject SimpleGUI extends SimpleGUIApplication { val chooser = new Fi. 阅读全文
posted @ 2012-01-17 22:29 nixil 阅读(704) 评论(0) 推荐(1) 编辑