用于平均 ASCII 值的神秘 Ruby 语法

Cryptic Ruby syntax for averaging ASCII values

我看到一个简单问题的有趣答案。

问题是:"Get the average of the ASCII values of each character in a string read from gets"

其中一个正确答案是:p gets.sum/~/$/

我搜索了 Google 但没有找到任何关于此语法的解释。欢迎任何见解。谢谢

我们这里发生了一些事情

  1. gets.sum 只是在 gets 输入的字符串上调用 sum 并返回一个整数。

The result is simply the sum of the binary value of each byte in str...

  1. /$/ 只是一个 Regexp 寻找行尾的位置
  2. ~运算符Regexp上告诉它对$_全局变量[=45进行操作=] 这是输入到 getsreadline 的最后一个字符串。总之这个returns行尾的索引

Matches rxp against the contents of $_. Equivalent to rxp =~ $_.

  1. 最后,将这 2 个结合在一起,我们得到一个 /,它只是一个对 2 个整数进行运算的除法运算符。

也可以使用一些空格来使事情更清楚

p gets.sum / ~/$/

注意:如果这是平均值,他们会添加 \n 的值,但不会再将其除掉:

gets.sum/~/$/
# Hello
# => 102
"Hello".sum / "Hello".length
# => 100
"Hello\n".sum / "Hello".length
# => 102
"Hello\n".sum / "Hello\n".length
# => 85