Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于平均ASCII值的神秘Ruby语法_Ruby_Syntax_Ascii_Average_Gets - Fatal编程技术网

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

用于平均ASCII值的神秘Ruby语法,ruby,syntax,ascii,average,gets,Ruby,Syntax,Ascii,Average,Gets,我看到一个简单问题的有趣答案 问题是:“获取从gets读取的字符串中每个字符的ASCII值的平均值。” 正确答案之一是:p get.sum/~/$/ 我搜索了谷歌,但找不到任何解释这个语法。欢迎有任何见解。谢谢。我们这里有几件事要做 gets.sum只是调用由gets输入的字符串,并返回一个整数 结果就是str中每个字节的二进制值之和 /$/只是在寻找行尾所在的位置 on a告诉它在上操作,这是gets或readline的最后一个字符串输入。简而言之,它返回行末尾的索引 将rxp与$\的内容匹配

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

问题是:“获取从
gets
读取的字符串中每个字符的ASCII值的平均值。”

正确答案之一是:
p get.sum/~/$/


我搜索了谷歌,但找不到任何解释这个语法。欢迎有任何见解。谢谢。

我们这里有几件事要做

  • gets.sum
    只是调用由
    gets
    输入的字符串,并返回一个整数
  • 结果就是str中每个字节的二进制值之和

  • /$/
    只是在寻找行尾所在的位置
  • on a告诉它在上操作,这是
    gets
    readline
    的最后一个字符串输入。简而言之,它返回行末尾的索引
  • 将rxp与$\的内容匹配。相当于rxp=~$

  • 最后,把这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
    

    我们这里有几件事

  • gets.sum
    只是调用由
    gets
    输入的字符串,并返回一个整数
  • 结果就是str中每个字节的二进制值之和

  • /$/
    只是在寻找行尾所在的位置
  • on a告诉它在上操作,这是
    gets
    readline
    的最后一个字符串输入。简而言之,它返回行末尾的索引
  • 将rxp与$\的内容匹配。相当于rxp=~$

  • 最后,把这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
    

    这段代码看起来很像。虽然这是一个很好的爱好,也是学习一门语言的好方法,但您应该确保不要在实际的生产代码中使用这些聪明的一行程序。在打算维护一段时间的实际程序中,目标代码应该是枯燥、可读和可理解的,而不是“聪明的”。@HolgerJust我认为正是这些因素使它成为了解一门语言的一种非常糟糕的方法。@MarkThomas好吧,并不是说你应该在编写它们时使用这些一行程序。但是,通过尝试理解它们是如何工作的(甚至自己编写),您可以对语言的语法和语义细节有一个深刻的理解。这有助于您以后在生产代码中检测和避免潜在的问题,如果没有这样详细的理解,您甚至可能不会注意到这些问题。你是绝对正确的,虽然在代码中,高尔夫通常不是一个很好的方法来获得一种语言的基本理解或学习常见和公认的习语。这仍然很有趣:)这段代码看起来很像。虽然这是一个很好的爱好,也是学习一门语言的好方法,但您应该确保不要在实际的生产代码中使用这些聪明的一行程序。在打算维护一段时间的实际程序中,目标代码应该是枯燥、可读和可理解的,而不是“聪明的”。@HolgerJust我认为正是这些因素使它成为了解一门语言的一种非常糟糕的方法。@MarkThomas好吧,并不是说你应该在编写它们时使用这些一行程序。但是,通过尝试理解它们是如何工作的(甚至自己编写),您可以对语言的语法和语义细节有一个深刻的理解。这有助于您以后在生产代码中检测和避免潜在的问题,如果没有这样详细的理解,您甚至可能不会注意到这些问题。你是绝对正确的,虽然在代码中,高尔夫通常不是一个很好的方法来获得一种语言的基本理解或学习常见和公认的习语。不过还是很有趣:)