Ruby不能放入串联的字符串和哈希元素?

时间:2014-10-10 21:37:15

标签: ruby hash

我是红宝石的新手。以下代码输出rubypage参数:

cgi = CGI.new
puts cgi.params['rubypage']

但是,只要我将其改为此,就不会输出任何内容

cgi = CGI.new
puts cgi.params['rubypage']+"a"

为什么+"a"的存在不会导致输出?如何将CGI params元素与字符串连接?

4 个答案:

答案 0 :(得分:1)

如果您检查其文档,您会发现CGI.params返回Hash,其参数名称为其键,参数值列出作为其值。这适用于可以多次指定相同查询参数的事实。

如果您只想为给定参数选择一个值,那么您可以索引到CGI对象本身,并且您应该能够在结果中附加一个字符串:

puts cgi['rubypage'] + "a"

puts "#{cgi['rubypage']}a"

如果你想要一个参数的所有值的数组,每个都附加相同的字符串,那么你可以这样做:

rubypageA = cgi.params['rubypage'].map do |value|
  "#{value}a"
end

答案 1 :(得分:0)

你正在做的事情应该有效,取决于该params散列中的内容。

尝试使用irb进行简单测试:

$ irb
2.1.2 :001 > "string"+"another"
 => "stringanother" 
2.1.2 :002 > 
如果您打算做很多事情,

Ruby's string interpolation可能会引起您的兴趣。

试试这个:

puts "#{cgi.params['rubypage']}a"

答案 2 :(得分:0)

cgi.params['rubypage']是一个数组。您不能将字符串连接到数组。错误" TypeError:无法将String转换为数组"必须在某个地方登录。

答案 3 :(得分:0)

将以下内容添加到CGI脚本中:

require 'cgi'

$stdout.sync = true  #Do not buffer output to STDOUT
$stderr.reopen($stdout)  #Send errors to stdout(which goes to your browser)

然后将错误消息发送到您的浏览器,例如:

/usr/local/apache2/cgi-bin/myprog.rb:17:in `': no implicit conversion
of String into Array (TypeError)

如果您尝试在常规Ruby程序中执行以下操作,则会出现同样的错误:

[1, 2, 3] + 'a'
  

我读了一些关于cgi是90s的其他抱怨,这也意味着   cgi存在很多安全隐患?

任何网站都存在安全隐患。 CGI非常轻量级,所以如果你想做简单的事情(或定制的东西),它就没问题了。它是对网络编程的一个很好的介绍。