Ruby找到所有常量

时间:2012-12-05 10:42:05

标签: ruby

我是Ruby的新手,很抱歉,如果这是一个简单的问题。 我想打开一个ruby文件并搜索所有常量,但我不知道正确的正则表达式。

这是我的简化代码:

def findconst()
 filename = @path_main  
 k= {}
 akonstanten = []
 k[:konstanten] = akonstanten


 if (File.exists?(filename))
  file = open(filename, "r")
   while (line = file.gets)
    if (line =~  ????)
     k[:konstanten] << line
    end
   end
 end 
end

2 个答案:

答案 0 :(得分:2)

您可以使用Ripper库来提取令牌。

例如,此代码将返回文件的常量和方法名称

A = "String" # Comment
B = <<-STR
  Yet Another String
STR

class C
  class D
    def method_1
    end
    def method_2
    end
  end
end

require "ripper"

tokens = Ripper.lex(File.read("file.rb"))

pp tokens.group_by { |x| x[1] }[:on_ident].map(&:last)
pp tokens.group_by { |x| x[1] }[:on_const].map(&:last)

# => ["method_1", "method_2"]
# => ["A", "B", "C", "D"]

答案 1 :(得分:0)

正如Sergio所说,使用Caps搜索单词不仅会给你常量,而且如果它足够好就足够了。

您正在寻找的正则表达式类似于

if (line =~ /[^a-z][A-Z]/)

其中表示匹配任何没有小写字母的资本。当然这只会计算每行一个,所以你可能会考虑对流进行标记并处理令牌,而不是行。