【发布时间】:2017-01-21 14:23:44
【问题描述】:
我正在寻找一种可能性,可以在 .yml 文件中声明一个 Magick::StyleType 常量,然后将此常量加载到 ruby 文件中。 或者,如果这不可能,那么我需要知道如何将字符串转换为 ruby 中的 Magick::StyleType 常量。
以下是详细信息:
我正在尝试编写一个 ruby 程序,它在图片上放置一些文本,我使用 RMagick 界面。 在我的 ruby 程序中,我有一个方法可以指定文本的不同属性,例如 font-family 或 font-style。此方法包括以下行:
self.font_style = ItalicStyle
现在我想将所有可更改的参数存储在一个 YAML 配置文件 (config.yml) 中,所以这个 config.yml 包含以下几行:
#font style (like bold, italic and so on)
:font_style: ItalicStyle
现在我将 config.yml 加载到我的 ruby 文件中,并且我的方法中的上述行现在读取
self.font_style = config_file[:font_style]
当我现在运行我的 ruby 文件时,我收到错误消息:
`font_style=': wrong enumeration type - expected Magick::StyleType, got String (TypeError)
因此,在搜索了一些关于该主题的内容后,我首先将 config.yml 更改为
:font_style: !/ruby/constant ItalicStyle
这给了我与上面相同的错误消息,然后我尝试了这个:
:font_style: !/ruby/symbol :ItalicStyle
并收到此错误消息:
`font_style=': wrong enumeration type - expected Magick::StyleType, got Symbol (TypeError)
然后我签入了irb:
require 'rmagick' => true
Magick.const_get(ItalicStyle) => ItalicStyle=2
Magick.const_get(ItalicStyle).class => Magick::StyleType
所以,最后我得到了我的问题:我需要如何更改线路
:font_style: !/ruby/symbol :ItalicStyle
在我的 config.yml 文件中,以便在加载到我的 ruby 文件时 ItalicStyle 将被识别为 Magick::StyleType 常量?
或者当我离开时
:font_style: ItalicStyle
在 config.yml 中并将 ItalicStyle 作为字符串加载到我的 ruby 文件中:是否有可能将 ItalicStyle 从字符串直接转换为 ruby 文件中的 Magick:StyleType 常量?
如果有人可以提供帮助,我会非常高兴。我已经尝试了几天来寻找解决方案,我的项目确实需要它。
【问题讨论】:
-
将默认值 转储 到 yaml 以检查它们应该是什么样子有什么问题?有关正确的解决方案,请参阅下面@spickermann 的答案。
标签: ruby constants configuration-files rmagick