RubyNative 是一个将 Ruby 核心API移植到 Swift 的实现,旨在与 Diamond 脚本解释器或任何希望比 Foundation 套件提供的更简洁的文件输入输出访问权限的 Swift 程序一起使用。它还扩展了 Swift 的 String 和 Array 类,并提供了一个很好地集成的 Regexp 类,以减轻处理不妥协 Swift 字符串的程序员的负担。
为什么要把 Ruby 移植到 Swift?使用严格类型和作用域的语言进行脚本编写可以避免许多动态语言的陷阱,并且在编辑器中工作时可以提供自动完成。这使得您的脚本在开发时间上运行得更快,在运行时也非常快。这两种语言在语法上也很匹配。
看起来像许多底层UNIX代码?我们选择保持靠近金属级,并且 Ruby API 似乎基于 POSIX 接口。现在还不清楚当 Swift 发布于 Linux 时,Foundation 是否可用。目前,该项目对 Foundation 类NSURL和NSRegularExpression的依赖性最小,因为那不是 Swift 在 Linux 上清晰之前值得复制的。
在这个阶段,Ruby 的 Dir、IO、File、StringIO、Time 和 Stat 类已经实现。这些类尽可能接近原始记录的函数功能。输入参数通常是类似于 string_like
或 data_like
的协议,允许在类型之间自动转换。返回值是具体的类型String Int,Float 或 Data 或实例。
下面给出了一些已实现在 Swift 中的 Ruby 常见习惯用法
SwiftRuby 尽量少使用 Ruby 的操作符重载,有一个例外:处理字符串时的下标引用。有两种一般形式。使用整数下标从字符串中提取范围的下标引用,以及使用字符串提供正则表达式的简洁语法。
有风险的在剥掉 Swift 尽力保护我们免受字符串内部结构的影响的情况下,定义了简单的扩展,以简化脚本
如果你这么考虑,字符串的逻辑索引就是一个正则表达式。Ruby 对这个想法进行了玩弄,但 SwiftRuby 将其推向了更高的层次。以下是一些示例来解释这一点:
SwiftRuby 也可作为 CocoaPod 使用,无需使用 Diamond 脚本解释器,并遵循 MIT 许可协议。如果您有任何评论或建议,请通过 Twitter 联系作者 @Injection4Xcode。