Rhino 1.7与Java集成的一个小例子

18 篇文章 0 订阅
1 篇文章 0 订阅
在读Steve Yegg的blog上[url=http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html]Rhinos and Tigers[/url]的时候读到这么一页演示稿:
[img]http://rednaxelafx.iteye.com/upload/picture/pic/16213/436c723e-43cb-3693-abde-5036584bfbac.jpg[/img]
以前一直没这么试过,觉得很兴奋,马上打开[url=http://www.mozilla.org/rhino/download.html]Rhino 1.7R1[/url]的命令行交互解释器来试了下,果然可以 :lol:
Rhino 1.7 release 1 2008 03 06
js> Thread = java.lang.Thread
[JavaClass java.lang.Thread]
js> Runnable = java.lang.Runnable
[JavaClass java.lang.Runnable]
js> var thread = new Thread(new Runnable() {
> run: function() { print('hello!') }
> })
js> thread.start()
hello!

js> var obj1 = {
> run: function() { print('hi') }
> }
js> new Thread(new Runnable(obj1)).start()
hi

js> var obj2 = { speak: function() { print('Rhino rocks!') }}
js> obj2.run = function() { this.speak() }
js> var foo = new JavaAdapter(Thread, obj2)
js> foo.start()
Rhino rocks!


这种object literal语法是JavaScript里让我兴奋的几种语法结构之一:
var obj1 = { run: function() { print('hi') }}

让需要某种类型但该类型只会被使用一次,定义一个类太浪费了。用object literal定义一个匿名类型就不错。当然JavaScript里的这个object literal算不上定义了匿名类型——感觉上只是声明了一个hashtable而已。

Steve Yegg的那个演讲还有不少有趣的地方:VM与语言互操作、Scala的类型系统等。得慢慢把其中的信息吸收过来。不过既然是rant,里面的内容就不能全信了……那个帖得连回复一起读。

P.S. 上面代码里我先写了这两行:
Thread = java.lang.Thread
Runnable = java.lang.Runnable

声明了两个变量分别代表Thread类与Runnable接口。因为Rhino不会自动引入java.lang包,所以不这么做的话每次使用这些类和接口都要写完整的包名+类名了,我嫌麻烦所以用变量来简化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值