在ruby DSL实现中捕获规范文件名?

在ruby DSL实现中捕获规范文件名?,ruby,dsl,objective-c++,vmat,Ruby,Dsl,Objective C++,Vmat,我正在编写一个rubyDSL,它将用于代码生成大量Objective-C++函数。我希望每个函数的名称都是从其rubyDSL源文件的名称派生出来的 例如,给定此源文件clusterOptions.rb: require './vMATCodeMonkey' VMATCodeMonkey.new(:print).options_processor <<EOS -cutoff: flag: set('useCutoff', true), arg: vector('double

我正在编写一个rubyDSL,它将用于代码生成大量Objective-C++函数。我希望每个函数的名称都是从其rubyDSL源文件的名称派生出来的

例如,给定此源文件
clusterOptions.rb

require './vMATCodeMonkey'

VMATCodeMonkey.new(:print).options_processor <<EOS
  -cutoff:    flag: set('useCutoff', true), arg: vector('double')
  -depth:     flag: set('useInconsistent', true), arg: scalar('double', default: 2.0)
  -maxclust:  flag: set('useCutoff', false), arg: vector('index')
EOS
下面是它捕获的内容:

@caller_file = "/Users/Shared/Source/vMAT/ruby/clusterOptions.rb"

正在评估的源文件的完整路径存储在
\uuuuuu file\uuuu
中。如果只需要文件名,可以使用:

File.basename(__FILE__)
< > >代码>文件Fiere> 常量,对于C、C++、Perl和Python等都是常见的。 如果您需要知道调用当前正在运行的例程的是哪个文件,则可以这样做:

caller(1)[0].split(':')[0]

这假设您的文件名中没有
,但在大多数情况下,这应该是一个相当安全的假设。您还需要在库的入口点调用此函数。如果它是堆栈中更深的一个方法,请测试调用方(2),依此类推。

要计算的源文件的完整路径存储在
\uuuuuuuuuuuuuuu文件中。如果只需要文件名,可以使用:

File.basename(__FILE__)
< > >代码>文件Fiere> 常量,对于C、C++、Perl和Python等都是常见的。 如果您需要知道调用当前正在运行的例程的是哪个文件,则可以这样做:

caller(1)[0].split(':')[0]

这假设您的文件名中没有
,但在大多数情况下,这应该是一个相当安全的假设。您还需要在库的入口点调用此函数。如果它是堆栈中更深的一个方法,那么测试调用方(2)
,依此类推。

我应该说明我曾尝试使用
\uuuuu FILE\uuuuu
,但它捕获了
vMATCodeMonkey.rb
而不是
clustoroptions.rb
。我应该说明我曾尝试使用
\uu FILE\uuu
,但是它捕获的是
vMATCodeMonkey.rb
,而不是
clusterOptions.rb