犯罪级糟糕的 Ruby 代码之旅 | Jared Norman

主要观点:作者和 Marco Roth 用 Ruby 犯了各种“罪”并成为 Rubocops 的逃犯,在今年的 Advent of Code 活动中通过重写运算符等操作来解决问题,介绍了 Ruby 的一些特性如 Refinements、运算符重载等,并展示了用这些特性写出的一些看似奇怪但有趣的代码,还提到后续可能会用更多方法来“犯罪”。
关键信息:

  • 用 Refinements 重定义 Integer 的位运算符失败,转而使用 Refinements 只在当前代码上下文中修改类。
  • 重写 unary +-运算符来从 Rule 类中提取整数。
  • 用 Refinements 重写 Array 的多个方法,如将sum变成>=等。
  • 用 metaprogramming 定义新的运算符来别名现有 Array 方法。
  • 展示了一段包含多种 Ruby 特性的复杂代码,还提到后续可能的“犯罪”行为。
    重要细节:
  • 在解决 Advent of Code 问题时,不想用常规方法解析输入,而是用eval执行表达式并返回 Rule 对象。
  • 介绍了 Kevin Newton 关于 Ruby 运算符的博客。
  • 展示了各种重写运算符后的代码示例,如[1, 2, 3, 4] > ->(n) { n + 1 }等。
  • 提到用method_missing等方法进行后续“犯罪”行为。
阅读 4
0 条评论