在ruby DSL实现中捕获规范文件名?
我正在编写一个rubyDSL,它将用于代码生成大量Objective-C++函数。我希望每个函数的名称都是从其rubyDSL源文件的名称派生出来的 例如,给定此源文件在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
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
。