Roy Notes

21世纪的互联网居民

Happy New Year to You!

Permalink

1
2
3
4
$ pry

2.0.0 (main):0 > 'Happy new year to you!'.each_byte.inject(:+)
=> 2014

偶尔在 twitter 上看到这个,惊喜之余翻出inject探个究竟

文档给出这样的例子

1
2
(5..10).inject(:+)
=> 45

inject可以解释作注入,它是Enumerable其中的一个实例方法,实现了Enumerable模块的类都可以使用它的实例方法,Array类当然实现了它。所以inject的作用就是在每个数组元素之间进行你想做的处理。Ruby 的API 文档给出了很直观的例子。

回到开头那行代码就很直白了,将字符串转换成字节码然后相加,最终得到2014,令人愉悦的是那个字符串是Happy new year to you!

尝试用Java来写一下

1
2
3
4
5
6
7
8
9
10
    public static void main(String[] args) {
      String str = "Happy new year to you!";

      int sum  = 0;
      for(byte b: str.getBytes()) {
          sum += b;
      }
      
      System.out.println(sum);
  }

Comments