首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Builder动态元素

Builder动态元素
EN

Stack Overflow用户
提问于 2019-11-04 03:41:46
回答 1查看 151关注 0票数 0

我试图通过程序运行,并使用构建器方法动态分配元素。在我的过程中,我试图使用变量动态地分配元素。我尝试了几个选项,让这个变量传递到元素中,但是它不起作用。

我最初是在散列中构建我的数据,但是在我的整个过程中,我有重复的键,所以我不得不移到更直接的东西上。

是否可以使用生成器来达到我想要的效果?

代码语言:javascript
运行
复制
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

输出

代码语言:javascript
运行
复制
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>

期望输出

代码语言:javascript
运行
复制
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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 12:38:53

代码语言:javascript
运行
复制
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__。当该方法由字符串标识时,该字符串被转换为符号。

只要确保尝试限制它的使用范围,因为它是一种强大的方法,它可以很容易地破坏东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58686921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档