Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:erb抛出错误“`结果';:can';t将字符串转换为整数(TypeError)";_Ruby_Erb_Typeerror - Fatal编程技术网

Ruby:erb抛出错误“`结果';:can';t将字符串转换为整数(TypeError)";

Ruby:erb抛出错误“`结果';:can';t将字符串转换为整数(TypeError)";,ruby,erb,typeerror,Ruby,Erb,Typeerror,快速背景:我正在设置一个快速而肮脏的模板方案,其中我所有的模板文件都命名为“*.erb”。填充数据驻留在yaml文件中。输出到模板名称减去“.erb”的文件 我没有对erb做太多的工作,我得到了错误“`result':无法将字符串转换为整数(TypeError)”。。。这对我来说没什么意义 下面是完成这项工作的类(generate_interface.rb): 模板文件(test.txt.erb): 最后,输出和错误消息: $ ruby -d test.rb Exception `NoMetho

快速背景:我正在设置一个快速而肮脏的模板方案,其中我所有的模板文件都命名为“*.erb”。填充数据驻留在yaml文件中。输出到模板名称减去“.erb”的文件

我没有对erb做太多的工作,我得到了错误“`result':无法将字符串转换为整数(TypeError)”。。。这对我来说没什么意义

下面是完成这项工作的类(generate_interface.rb):

模板文件(test.txt.erb):

最后,输出和错误消息:

$ ruby -d test.rb
Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
i: {"test_id"=>XXX123}
i['test_id']: XXX123
( i['test_id'] ).to_s: XXX123
erbfile: "test.txt.erb"
outfile: "test.txt"
template: "Line 1\nLine 2 test_id: <%= i['test_id'] %>\nLine 3\n"
message: #<ERB:0xb74ac150 @src="_erbout = ''; _erbout.concat \"Line 1\\nLine 2 test_id: \"\n; _erbout.concat(( i['test_id'] ).to_s); _erbout.concat \"\\nLine 3\\n\"\n\n; _erbout", @safe_level="%<>", @filename=nil>
Exception `TypeError' at /usr/lib/ruby/1.8/erb.rb:715 - can't convert String into Integer
/usr/lib/ruby/1.8/erb.rb:715:in `result': can't convert String into Integer (TypeError)
    from /usr/lib/ruby/1.8/erb.rb:714:in `call'
    from /usr/lib/ruby/1.8/erb.rb:714:in `result'
    from ./generate_interface.rb:26:in `gobutton'
    from ./generate_interface.rb:17:in `map'
    from ./generate_interface.rb:17:in `gobutton'
    from test.rb:6
$ruby-d test.rb
异常'NoMethodError'位于/usr/lib/ruby/1.8/rational.rb:78-rational(1,2)的未定义方法'gcd':rational
i:{“测试id”=>XXX123}
i['test_id']:XXX123
(i['test_id'])。收件人:XXX123
erbfile:“test.txt.erb”
输出文件:“test.txt”
模板:“第1行\n第2行测试\u id:\n第3行\n”
信息:#
位于/usr/lib/ruby/1.8/erb.rb:715的异常“TypeError”-无法将字符串转换为整数
/usr/lib/ruby/1.8/erb.rb:715:“结果”中:无法将字符串转换为整数(TypeError)
from/usr/lib/ruby/1.8/erb.rb:714:in'call'
from/usr/lib/ruby/1.8/erb.rb:714:in'result'
from./generate_interface.rb:26:in'gobutton'
from./generate_interface.rb:17:in`map'
from./generate_interface.rb:17:in'gobutton'
来自测试。rb:6
我认为_erbout.concat((I['test\u id'])to_s有问题,但当我显式打印(I['test\u id'])to_s时,我得到了我所期望的“XXX123”。

(你的generate\u interface.rb粘贴没有完成最后的
end

直接的问题是,
Erb.initialize
的第二个参数是安全级别;第三个是修剪选项。您的修剪选项被解释为安全级别

要解决这个问题,就要改变

  message = ERB.new(template, "%<>" )

在下面的行中,将
message.result
更改为
result

Line 1
Line 2 test_id: <%= i['test_id'] %>
Line 3
#! /usr/bin/ruby

require "generate_interface"

test_interface = GenerateInterface.new( "test.yaml" )
test_interface.gobutton
$ ruby -d test.rb
Exception `NoMethodError' at /usr/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational
i: {"test_id"=>XXX123}
i['test_id']: XXX123
( i['test_id'] ).to_s: XXX123
erbfile: "test.txt.erb"
outfile: "test.txt"
template: "Line 1\nLine 2 test_id: <%= i['test_id'] %>\nLine 3\n"
message: #<ERB:0xb74ac150 @src="_erbout = ''; _erbout.concat \"Line 1\\nLine 2 test_id: \"\n; _erbout.concat(( i['test_id'] ).to_s); _erbout.concat \"\\nLine 3\\n\"\n\n; _erbout", @safe_level="%<>", @filename=nil>
Exception `TypeError' at /usr/lib/ruby/1.8/erb.rb:715 - can't convert String into Integer
/usr/lib/ruby/1.8/erb.rb:715:in `result': can't convert String into Integer (TypeError)
    from /usr/lib/ruby/1.8/erb.rb:714:in `call'
    from /usr/lib/ruby/1.8/erb.rb:714:in `result'
    from ./generate_interface.rb:26:in `gobutton'
    from ./generate_interface.rb:17:in `map'
    from ./generate_interface.rb:17:in `gobutton'
    from test.rb:6
  message = ERB.new(template, "%<>" )
  message = ERB.new(template, nil, "%<>" )
  result = message.result
  result = message.result(binding)