我试图通过程序运行,并使用构建器方法动态分配元素。在我的过程中,我试图使用变量动态地分配元素。我尝试了几个选项,让这个变量传递到元素中,但是它不起作用。
我最初是在散列中构建我的数据,但是在我的整个过程中,我有重复的键,所以我不得不移到更直接的东西上。
是否可以使用生成器来达到我想要的效果?
require 'builder'
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
x.instruct!
x.character do
stats = "health, mana, armor"
stats.split(",").each do |stat|
key = stat.strip.downcase
value = rand()
x.key value
end #end do
end #end do输出
C:\Projects>ruby test.rb
<?xml version="1.0" encoding="UTF-8"?>
<character>
<key>0.1405191069855357</key>
<key>0.3484226234753265</key>
<key>0.4658284443108096</key>
</character>期望输出
C:\Projects>ruby test.rb
<?xml version="1.0" encoding="UTF-8"?>
<character>
<health>0.1405191069855357</health>
<mana>0.3484226234753265</mana>
<armor>0.4658284443108096</armor>
</character>发布于 2019-11-04 12:38:53
require 'builder'
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
x.instruct!
x.character do
stats = "health, mana, armor"
stats.split(",").each do |stat|
key = stat.strip.downcase
value = rand()
x.__send__(key, value)
end
end您可以使用ruby对象方法send或其别名__send__。但是,由于send字也可以作为其键使用,因此只有发送公开供对象使用。上述方法的文档:https://ruby-doc.org/core-2.6.5/Object.html#method-i-send
调用由符号标识的方法,将指定的任何参数传递给它。如果名称send与obj中的现有方法发生冲突,则可以使用
__send__。当该方法由字符串标识时,该字符串被转换为符号。
只要确保尝试限制它的使用范围,因为它是一种强大的方法,它可以很容易地破坏东西。
https://stackoverflow.com/questions/58686921
复制相似问题