在YML文件中解析Ruby变量

时间:2016-09-01 09:33:03

标签: ruby yaml

我在这里有一个yml文件,我在其中获取了部分ruby代码并将其作为哈希:

answer: "The answer is: #{result}"

结果变量来自我在这里发起的ruby代码:

require 'yaml'
MESSAGES = YAML.load_file('mymessages.yml')

result = case operator
           when '1'
             number1.to_i() + number2.to_i()
           when '2'
             number1.to_i() - number2.to_i()
           when '3'
             number1.to_i() * number2.to_i()
           else
             number1.to_f() / number2.to_f()
           end

  prompt('answer')

当我启动它时,它只是将整个文本显示为字符串但结果变量未显示w / c假设是2个数字的加法或减法等。

你知道如何解决这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

YAML和Ruby是两种不同的语言。你不能在YAML中使用Ruby字符串插值,因为YAML是YAML,而不是Ruby。你只能在Ruby中使用Ruby字符串插值。

答案 1 :(得分:0)

您是否尝试过使用FILE?我测试了它但结果没有显示出来。

答案 2 :(得分:0)

你需要在一个单独的脚本中提取你遇到问题的代码,你可以单独测试或发布,这里是我对你的代码所做的一个例子,我必须猜测你的Yaml的内容文件,因为你没有提供。

require 'yaml'

MESSAGES = YAML.load_file('./mymessages.yml')
p MESSAGES # poor mans debug
operator = MESSAGES["operator"].to_f #supposing in your yaml it is a Hash with key "operator"
#operator = '1' # for testing without the yaml
number1, number2 = 4.0, 5.0

result = case operator
when '1'
  number1 + number2
when '2'
  number1 - number2
when '3'
  number1 * number2
else
  number1 / number2
end

puts result # 9.0
prompt = "The answer is: #{result}".sub(/\.0$/,'') #remove unwanted traling .0
puts prompt # The answer is: 9

你看我使用变量,我可以检查put或p,真正的测试会更好,但我没有时间解释所有这些,但你应该学习它。 如果您多次执行.to_i转换,请尝试将其保存在变量中。 此外,我还没有看到需要使用整数和浮点数,如果一个是浮点数,将它们全部视为浮点数,如果你不想要使用子方法删除它,或者使用chaneg类型删除它曾经这样

result = result.to_i if result == result.to_i