小编Cur*_*vus的帖子

Ruby中的递归文件列表

我是Ruby的新手(作为Java开发人员),并试图实现一个方法(哦,抱歉,一个函数),它将以递归方式检索和生成子目录中的所有文件.

我把它实现为:

def file_list_recurse(dir)
  Dir.foreach(dir) do |f|
    next if f == '.' or f == '..'
    f = dir + '/' + f
    if File.directory? f
      file_list_recurse(File.absolute_path f) { |x| yield x }
    else
      file = File.new(f)
      yield file
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. File.new真的打开文件吗?在Java中,新文件("xxx")没有...如果我需要产生一些结构,我可以从Ruby中查询文件信息(ctime,size等)?
  2. {| x | yield x}对我来说看起来有点奇怪,从这样的递归函数中得到的结果是可以的,还是有某种方法可以避免它?
  3. 有没有办法避免检查'.' 和'..'在每次迭代?
  4. 有没有更好的方法来实现这个?

谢谢

PS:我的方法的示例用法是这样的:

curr_file = nil

file_list_recurse('.') do |file|
  curr_file = file if curr_file == nil or curr_file.ctime > file.ctime
end

puts curr_file.to_path + ' ' + curr_file.ctime.to_s
Run Code Online (Sandbox Code Playgroud)

(那会从树中获取最旧的文件) …

ruby recursion file

11
推荐指数
3
解决办法
7344
查看次数

对泛型函数的引用

是否有可能参考Kotlin中的通用函数?

例如,假设我有一个函数:

fun inline <reified T> appendToString(a: T, b: T) = a.toString() + b.toString
Run Code Online (Sandbox Code Playgroud)

你怎么能参考这个功能?这不会编译

var a = ::appendToString<Int>
Run Code Online (Sandbox Code Playgroud)

generics kotlin

7
推荐指数
2
解决办法
576
查看次数

标签 统计

file ×1

generics ×1

kotlin ×1

recursion ×1

ruby ×1