我们中的不少人应该都不会对「千年虫」问题有所陌生:它主要指代 2000 年附近发生的一系列计算机系统异常事件,起源于两位年份转换为四位年份的过程中发生的失误:98
可以解析成 1998
,99
可以解析成 1999
,而 00
却解析成了 1900
——「千年虫」问题最早在 1958 年便已被公开提出,但直到 2000 年即将到来之际才引起足够的重视。
从长远的角度来说,「千年虫」问题当然没有结束——我们还有 2100 年,2200 年,
我们中的不少人应该都不会对「千年虫」问题有所陌生:它主要指代 2000 年附近发生的一系列计算机系统异常事件,起源于两位年份转换为四位年份的过程中发生的失误:98
可以解析成 1998
,99
可以解析成 1999
,而 00
却解析成了 1900
——「千年虫」问题最早在 1958 年便已被公开提出,但直到 2000 年即将到来之际才引起足够的重视。
从长远的角度来说,「千年虫」问题当然没有结束——我们还有 2100 年,2200 年,
从上班到现在,在单位边看边写也折腾了一些代码了。作为一个有成百上千个 API 的后端项目,整个项目的 API 风格从十分原教旨主义的 RESTful 到看起来是 RESTful 实际上是 RPC 语义的都有。然而在实现需求的时候我越发发现,凡是那些十分原教旨主义的 RESTful API 我都能快速理解并掌握如何使用,而那些 RPC 语义并且在 URL Path 里充满着五花八门动词的 API 往往理解需要花费相当的难度。
长期以来至少在我的周围似乎都充斥着一种论断:「RESTful API 设计起来很别扭」,更有人会直言「
本篇文章首发于 TeaCon Blog:https://blog.teacon.org/shaders-and-framebuffers.html
本文基于:
读者可以在这里下载到本文的源代码:source.zip(56.
Forge 在高版本(Minecraft 1.13+)为事件总线添加了使用 Functional Interface 监听事件的方式。以下是接口声明:
<T extends Event> void addListener(Consumer<T> consumer);
我们可以注意到,我们不需要向 addListener
方法传入一个额外的 Class
代表事件的类型,也就是说事件类型只能通过我们传入的 Consumer<
从 Minecraft 1.13 开始,Forge 不再自带 Scala 标准库作为依赖(作为一个 Scala 吹,这让我很不爽),但 Forge 也为 Scala 提供了一个名为 Scorge 的解决方案。
Scorge 这个项目相当低调,虽然我很快就从 GitHub 上找到了 Scorge 的源代码,但我翻遍了 CurseForge 都没有找到 Scorge 这个