请教以下代码块中的
if File.basename(path)[0] == ?.
表示什么意思?谢谢。
Find.find(searchpath) do |path|
if FileTest.directory?(path)
if File.basename(path)[0] == ?.
Find.prune # Don't look any further into this directory.
else
next
end
end
代码出处链接 https://www.ibm.com/developerworks/aix/library/au-rubysysadmin/index.html
试了下原帖里的代码,即便把下面这段都去掉,也不会影响运行结果 所以很难确定 ?. 就等同于 "." :
if File.basename(path)[0] == ?.
Find.prune # Don't look any further into this directory.
else
next
end
原帖代码
require 'find'
puts ""
puts "-----------------------File Search-----------------------------------"
puts ""
print "Enter the search path : "
searchpath = gets
searchpath = searchpath.chomp
puts ""
print "Enter the search pattern : "
pattern = gets
pattern = pattern.chomp
puts"----------------------------------------------------------------------"
puts "Searching in " + searchpath + " for files matching pattern " + pattern
puts"----------------------------------------------------------------------"
puts ""
Find.find(searchpath) 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
if File.fnmatch(pattern,File.basename(path))
puts "Filename : " + File.basename(path)
s = sprintf("%o",File.stat(path).mode)
print "Permissions : "
puts s
print "Owning uid : "
puts File.stat(path).uid
print "Owning gid : "
puts File.stat(path).uid
print "Size (bytes) : "
puts File.stat(path).size
puts "---------------------------------------------------"
end
end
end
Ruby 中问号接着单个字母或者符号不是代表字符吗,就是类似于 c 中的单引号用法。
所以 ?. 就是 "." 吧,因为 Ruby 里好像没有区分字符和字符串
就是单个字符的字符串,没什么“很难确定”的。顺便这是我四年前的同样主题的帖:https://ruby-china.org/topics/11052
即便把下面这段都去掉,也不会影响运行结果
如果你还在初学编程(或者任何一门知识)的阶段,不要有这种“我试着改一下看看这个黑盒能出什么结果”的态度,而是要改成“我现在接触的都是皮毛,所以肯定有人 / 文档能完整解答”的态度。
就是想找在哪里定义了这种用法。无奈不知从何下手,多谢指点! 顺便问一下,为何将#4 里的那段代码删除,也不会影响运行结果?每个目录下应该都有 . 目录的呀。
就这个特例来说,在不知道语法定义的前提下,自己去探索的难度太大(因为一个问号加一个句点,绝大多数搜索引擎都不知道该怎么索引才好,一般都会在 normalize 的过程中清洗掉)。
来论坛直接提问就是更干脆的方案,而且一楼也有回答,先记住就行了。在知道了这是“单个字符串的字面量的语法”之后,可以在 http://ruby-doc.com/ 上搜索 literal(“字面量”的英文原文)或者 string literal(“字符串字面量”) ,尝试找到官方文档的解释。不过还是因为难于索引的缘故,只能点进搜索结果一行行地细读。
特别欣赏这种授之以渔的解答 那行代码里的意思是寻找以 . 开头的 directory,那么 . 目录(当前目录)能被搜到吗?还是一定要 . 开头的有名字的目录,比如 .dir_a。
可以用这个比较笨拙但有效的办法试试看:
if File.basename(path)[0] == ?.
puts "HAZDOT: " + path # 加入这一行,当某些文件夹的名字满足你的假设条件,就会打印出来
Find.prune # Don't look any further into this directory.
else
next
end
然后运行程序来验证你的假设就行了。
?在 1.8 的时候是用来查字符的 ascii 码的,?x 相当于'x'.ord 这样,在 1.9 之后就变成返回单个字符本身了,一般很少会这么用。。