闭包概念在C++,.Net这些语言到是用的少,而在脚本语言比如javascript、perl、lua比较常见
下面我就讲一下lua脚本语言下的闭包,最好动动手才能有更深的印象
如下是lua语句
--闭包 function f1() i=0 local function f2() i=i+1 return i end i=i+1 return f2 end function t1() i=0 i=i+1 return i end g1 = f1() print(g1()) print(g1()) print(t1()) print(t1())
输出结果如下
function f1()
i=0
local function f2()
i=i+1
return i
end
i=i+1
return f2
end
函数的闭包实际上是一个函数嵌套在另一个函数中,当然还不止只这些,可以看到
g1 = f1()
print(g1())
print(g1())
输出的是2,3
这也就是闭包的一个特性,局部变量存在于堆栈之中,并不被释放掉
所以我觉得掌握这两点,初步应用闭包应该没什么问题。本人也是刚学lua的菜鸟,也只是借鉴别人的,再靠自己慢慢领悟。不好的地方请多指教
http://blog.csdn.net/ym012/article/details/7208750 这篇文章讲得很不错 大家可以参考
在过去的两年里,触屏设备飞速增长。iOS和Android设备让开发者和设计师开始重新思考他们的网页应用,以提供更好的触屏体验。
移动Web应用相对于本地的App有很多优势,虽然也有很多设计和开发上的挑战。这里列出了一系列有用的框架来帮助基于HTML的webapp开发。他们支持大部分流行的智能手机和平板。
1. Lungo.js:HTML5 移动开发框架
Lungo.js 是第一个应用HTML5和CSS3特性的移动开发框架。它可以帮助开发者创建iOS,Android,Blackberry和WebOS平台的应用。
Lungo.js 不需要任何web服务器的支持就能帮助用户实现HTML5的功能,例如WebSQL, Geolocation,History,Device orientation等等。
2. JO:一个简单的HTML5 App框架
JO可以帮助你创建类似本地应用的Web App。JO是一个开源的免费框架,可以和PhoneGap一起使用。
3. Joshfire:跨设备的开发框架
Joshfire是一个开源的跨设备开发框架,帮助开发者创建可以在多种设备上运行的web app。它使用HTML5和JavaScript,并且允许开发者快速整合本地应用和特定的web应用。
Joshfire可以让你的应用接受键盘,鼠标,触摸屏,遥控器等设备的输入。Joshfire支持Node.JS。
4. Sencha Touch:基于HTML5的移动网页开发框架
Sencha touch可以让开发者创建类似本地应用体验的web app。Shencha是第一个使用HTML5,CSS和JavaScript并且支持音频/视频,本地存储,圆角,渐变背景以及阴影的开发框架。
5. Baker:HTML5 电子书框架
Baker是用来在iPad或者iPhone平台上发布交互式的电子书或者电子杂志的HTML5电子书框架。.
6. Touchy Boilerplate
Touchy Boilerplate 是一个用来创建移动web app,包括HTML模板,Meta tag等的工具。Touchy可以支持动态页面导航,固定页头,滚动内容,浏览历史记录等功能。Touchy使用jQuery或者 Zepto.JS。
7. Ripple:让移动开发测试更容易
在不同的平台上测试移动应用是一件令人头疼的事情。Ripple可以帮助你在不同的平台商测试并且调试你的HTML5移动应用。Ripple是一个chrome的扩展。它可以模拟每个设备的详细信息,例如user_Agent,Geolocation等等。
8. RestKit
Restkit是一个objective-c的开发框架,目的是简化并加快与Restful的web service交互。它提供了一个简洁的HTTP request/response API和一个强大的对象映射系统。
9. HTML5 兼容性表格
Mobile HTML5是一个表格,显示了不同设备/平台对HTML5特性的支持情况。包括Safari, Android, Blackberry, IE,Opera,Firefox,webOS和Symbian。
10. MobileESP:检测你的移动网页访问者
MobileESP项目提供了一套简单、轻量级的API让网站的开发者检测访客是不是使用移动设备,或者使用的是哪种移动设备。
11. Tiggr
Tiggr是一个移动一个用创建工具,可以让你快速创建移动应用。你不需要写代码就能创建丰富的移动应用。
英文原文链接
View和SurfaceView都可以用于绘制图形,但各有各的适用场合。一般情况,主动更新,不考虑UI线程的限制,双缓存加速等情况下会优先考虑SurfaceView。
下面把上篇中的MyView通过继承SurfaceView来重新编写,具体如下:
public class MyView extends SurfaceView implements Callback, Runnable { private Paint mPaint; private SurfaceHolder mSurfaceHolder; private Thread mThread; private void initial() { mPaint = new Paint(); mPaint.setAntiAlias(true); this.setKeepScreenOn(true); mPaint.setColor(Color.RED); mThread = new Thread(this); mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); } public MyView(Context context) { super(context); initial(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initial(); } private void draw() { Canvas mCanvas = null; try { mCanvas = mSurfaceHolder.lockCanvas(); mCanvas.drawColor(Color.WHITE); mCanvas.drawText("绘制文字", 10, 20, mPaint); mCanvas.drawCircle(35, 50, 20, mPaint); } catch (Exception e) { e.printStackTrace(); } finally { if (mCanvas != null) { mSurfaceHolder.unlockCanvasAndPost(mCanvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { mThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void run() { draw(); } }
说明:
调用方式和以前一样,这也仅仅是一个View,只不过是继承SurfaceView而已!
效果如图:
希望对你有所帮助!:)