我需要一个我称之为shake_tree
的操作。我已经使用递归算法来实现它,只使用基本的红宝石的Fortran(引用旧报价“你可以在写的Fortran代码的任何语言。”),但我嫌疑有一个更简洁和惯用的红宝石方式。如何实现树形摇动器操作?
因为我不知道这个操作的通用名称,所以让我简单描述一下。我有这样的例子哈希散列:
{
"-cutoff:" =>
{
:flag => {:set_ie1 => [:useCutoff, true]},
:arg => {:vector_ie1 => :double}
},
"-depth:" =>
{
:flag => {:set_ie2 => [:useInconsistent, true]},
:arg => :double,
:default => 2.0
},
"-maxclust:" =>
{
:flag => {:set_ie3 => [:useCutoff, false]},
:arg => {:vector_ie2 => :index}
},
:fn => "arrayTypeOptions"
}
有嵌入的树结构中像:vector_ie1
和:set_ie3
独特的符号。我需要删除除了从根部到符号之间的路径以外的树的所有分支。鉴于上面的例子:
shake_tree(specs, :vector_ie1)
将返回:
{
"-cutoff:" =>
{
:flag => {:set_ie1 => [:useCutoff, true]},
:arg => {:vector_ie1 => :double}
}
}
和
shake_tree(specs, :set_ie2)
将返回:
{
"-depth:" =>
{
:flag => {:set_ie2 => [:useInconsistent, true]},
:arg => :double,
:default => 2.0
}
}
如何将一个更有经验的红宝石编码器的方法是什么?
为什么不使用像[RubyTree](http://rubytree.rubyforge.org/rdoc/index.html)这样的树库?它有一个'parentage'方法,会给你这个。 – 2013-04-26 01:55:45
@MarkThomas:感谢您的链接,但一目了然看起来像是过度杀伤。 ** ruby ** DSL的全部想法是让** ruby **完成大部分工作......现在,我的DSL的“解析器”包含在“源”字符串上调用“vMATCodeMonkey#instance_eval”! :-) – 2013-04-26 02:32:30