使用 sbt 的 np 插件自动创建目录结构和 build.sbt 文件

通常我们要创建一个 sbt 项目需要经历以下几步:

$ mkdir testscala && cd testscala      #创建项目目录 testscala,并进入该目录
testscala $  mkdir -p src/{main,test}/scala   #创建源文件目录结构,可能还需要 mkdir -p src/{main,test}/resources
$ vi build.sbt # 填入基本的信息 (name, organization, version)
$ sbt

这一看怎么这么复杂啊,特别是习惯了 Maven 的同学们更会这么觉得。Maven 不仅可应用各种模板来创建不同类型的工程,完整的工程目录结构都有了。

那么 sbt 能不能做到自动创建目录和配置文件呢,答案是: 本身不能。你可以基于一个项目模板目录结构拷来拷去。前面说是 sbt 本身不能,要知道 sbt 是一个插件化更彻底的玩意,如今的 0.12.2 的 sbt.zip 才 1M 大小,其余全赖插件帮你插来插去了。

因此,我们找来的 np(New Project) 插件 https://github.com/softprops/np 帮我们创建工程的目录结构和 build.sbt 文件。它能让我们创建项目的过程简化为以下两步操作:

$ mkdir testscala && cd testscala   #这一步还是不能少
$ sbt
> np name:testscala org:cc.unmi   #这样 testscala 下 {main.test}/{scala,resources} 和  build.sbt 文件都有了

np 的安装及使用可以参考:https://github.com/softprops/np,就是下面的步骤: 阅读全文 >>

Objective-C 实现自己的 Subscripting Methods 下标方法

在前一篇 Xcode 4.4/4.5 新特性 / LLVM 4.0 新语法 提到了 Xcode 4.4 之后对数组和字典的操作可以用下面的方式:

id value = array[i];
array[i] = newObj;
id value = dictionary[@"key"];
dictionary[@"key"] = newObj;

上面几行语句实际调用的方法分别对应如下:

NSArray : - (id)objectAtIndexedSubscript: (NSUInteger)index;
NSMutableArray : - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
NSDictionary : - (id)objectForKeyedSubscript: (id <NSCopying>)key;
NSMutableDictionary : - (void)setObject: (id)anObject forKeyedSubscript: (id <NSCopying>)aKey;

所以,如果你希望自己定义的类可以支持 obj[i] 和 obj[@"key"] 的方式来读取和设置值的话,就可以实现上面相应的方法,只是要处理好你自己参数和结果类型。现在就来看看下面自定义类 TestClass 的实现和执行效果: 阅读全文 >>