scala宏用例:教学scala

scala 2.10中全新的实验宏功能可以用许多有趣的方式使用:

这篇文章展示了它为教授scala打开的令人兴奋的新可能性。引用一个学生的话:“这太棒了……好玩!”.

练习是我为讲德语的软件工程师开发的“scala入门”培训课程的关键部分。没有人愿意听别人的对话8个小时——他们想对新语言有一种感觉,尝试新的语法,玩转新功能。

设计培训练习

但在解决问题时,总是要确保学生走上正确的道路。根据课程的大小,你不能一直盯着每个人的肩膀看。

这就是我决定利用单元测试的原因:学生可以使用预先写好的测试逐步完成练习,立即知道他们是否做错了什么。当结果最终被分享和讨论时,不愉快的意外是可以避免的。

向其中添加宏

所以,我听到你问,这与宏有什么关系?scala宏允许您进行以前不可能进行的某些测试。让我们看看。

上面的代码片段说明了一个教学模式匹配的练习。在之前学生听的演讲中,引入了各种模式,如替代模式和通配符模式。

练习描述说明:用3行或更少的代码重写此代码.这种方式,学生必须考虑如何应用新功能。

此外,他们被教导var应该少用。单元测试也可以检查这一点。

因此宏允许测试各种代码样式和度量。酷!

它是如何工作的

在幕后,单元测试使用DEF宏指令因为类型宏只在实验的scala 2.11分支中可用。第一,我认为有这种限制是不可能的,不过,在官方斯卡拉团队成员尤金·布马科的帮助下,结果很好。

方法任务-特性的一部分可测试的每个练习继承自-调用宏。现在它变得有趣了。由于def宏不能向现有类添加字段或方法,因此我必须创建一个基类任务我以后需要的所有领域,例如计算瓦尔斯代码使用。

然后宏将生成对该方法的调用注册任务具有类型的实例任务.因为字段已经声明,它们可以在实例化时被宏覆盖。ET Voice!

完整的宏代码相当难看,包含一些解决方法,但下面的代码片段显示了其中的小部分,其中瓦尔斯是确定的。此外,可以看到实际覆盖字段的方法。

总而言之,宏在我最近的scala培训中运行得很好。当学生们对他们的解决方案的长度和风格作出判断时,他们感到十分惊讶。我认为这是确保学生遵守他们刚刚学到的规则和概念的一个很好的方法;阻止他们坚持他们原来的Java习惯。

我期待的可能性类型宏将带来2.11。谢谢你的阅读。


评论由迪斯科