我正在学习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] == "."
?.
做什么? (我想可能是一个错字。)我没有看到其他地方描述的这种语法。
答案 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。