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

Pau*_*och 6 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
Run Code Online (Sandbox Code Playgroud)

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

if File.basename(path)[0] == "."
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*ten 11

?.返回点的ASCII值.你可以把几乎任何字符的问号后能得到它的ASCII值,如?a?3?\\等他们不是比较字符串的原因"."是,当你索引到一个字符串,你得到的字符的ASCII值在那个索引而不是char本身.要获取特定索引处的char,您可以将其[0, 1]用作索引.所以选项是:

if File.basename(path)[0] == ?.
Run Code Online (Sandbox Code Playgroud)

要么:

if File.basename(path)[0, 1] == "."
Run Code Online (Sandbox Code Playgroud)

甚至:

if File.basename(path)[0].chr == "."
Run Code Online (Sandbox Code Playgroud)