如何在 YAML 文件中声明 ruby 常量 (RMagick)

How to declare a ruby constant (RMagick) in a YAML file

我正在寻找在 .yml 文件中声明 Magick::StyleType 常量然后将此常量加载到 ruby 文件中的可能性。 或者,如果那不可能,那么我需要知道如何将字符串转换为 ruby.

中的 Magick::StyleType 常量

详情如下:

我正在尝试编写一个 ruby 程序,该程序在图片上放置一些文本,我为此使用了 RMagick 界面。 在我的 ruby 程序中,我有一个方法可以指定文本的不同属性,如字体系列或字体样式。此方法包括以下行:

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 从字符串转换为 Magick:StyleType 常量 ruby直接归档?

如果有人能提供帮助,我将非常高兴。我已经尝试了好几天来寻找解决方案,我的项目确实需要它。

我会在 YAML 文件中存储一个 String,因为这样更容易编写和阅读:

:font_style: ItalicStyle

然后我会通过名称获取常量来配置 Magick:

self.font_style = Object.const_get(config_file[:font_style])