语法是什么?这个Ruby例子意味着什么?

时间:2009-10-23 18:49:59

标签: ruby

我正在学习Ruby并在一些文档中找到了这个代码示例:

require 'find'

  total_size = 0

  Find.find(ENV["HOME"]) do |path|
    if FileTest.directory?(path)
      if File.basename(path)[0] == ?.
        Find.prune       # Don't look any further into this directory.
      else
        next
      end
    else
      total_size += FileTest.size(path)
    end
  end

目的是总结树中所有文件的文件大小,不包括以点开头的目录。行if File.basename(path)[0] == ?.显然正在执行目录名称测试。我会这样写的:

if File.basename(path)[0] == "."

?.做什么? (我想可能是一个错字。)我没有看到其他地方描述的这种语法。

3 个答案:

答案 0 :(得分:11)

?.返回点的ASCII值。您可以在问号后添加几乎任何字符以获取其ASCII值,例如?a?3?\\等。他们不将它与字符串{{进行比较的原因1}}是当你索引到一个字符串时,你得到该索引处的char的ASCII值而不是char本身。要获取特定索引处的char,可以使用"."作为索引。所以选项是:

[0, 1]

或者:

if File.basename(path)[0] == ?.

甚至:

if File.basename(path)[0, 1] == "."

答案 1 :(得分:2)

它是“。”的ASCII码点的简写。字符。请参阅Ruby语法中的numeric literals文档。

>> ?.
=> 46
>> ?a
=> 97

答案 2 :(得分:1)

表示返回下一个字符的字符代码。在Ruby中,说string [0]给你一个字符代码,所以就像说第一个字符是“。”。

有趣的是,这意味着像???!?!??这样的表达式在Ruby中是完全合法的。

看看here