改进表
与典型 shell 相比,Squirrel 的优秀特性之一就是它丰富的数据结构。如果数据可以进行良好地组织,那么即使是复杂的问题通常也能够快速得到解决。Squirrel 提供了真正的对象、异构数组和关联数组(在 Squirrel 中称为 表)。
一个 Squirrel 表由一些 slot 或 (键-值)对组成。除 Null 以外的任何值都可以充当一个键;任何值都可以被分配给一个 slot。您将使用 “箭头 操作符创建一个新的 slot(<-)。
让我们对 清单 2 的代码稍加改进,在将目录转变为任何子目录之前展示它的内容。使用什么方法?使用一个本地表在单独的 slot 中存放文件和子目录,然后相应地处理两个类别。清单 3 展示了新的代码。
清单 3. 增强后的清单 2 将首先输出目录的内容,然后递归到子目录
#!/usr/bin/env squirrelsh
function reveal( filedir ) {
local tally = {};
tally[FILE] <- [];
tally[DIR] <- [];
if ( !exist( filedir ) ) {
return;
}
if ( filename( filedir ) == ".." || filename( filedir ) == "." ) {
return;
}
local names = readdir( filedir );
foreach( index, name in names ) {
tally[ filetype( name ) ].append( name ) ;
}
foreach( index, file in tally[FILE] ) {
printl( file );
}
foreach( index, dir in tally[DIR] ) {
printl( filename( dir ) + "/" );
}
foreach( index, dir in tally[DIR] ) {
reveal( dir );
}
}
local entrIEs = readdir( (__argc >= 2) ? __argv[1] : "." );
exit( 0 );
标签: