0

我写了一个小演示代码,向您展示我的问题:

puts "Enter your feeling"
a = gets.chomp
@feel = "good"
puts a

所以当涉及到输入时,我输入:

Actually i fell very #{@feel}

然后我希望得到这个输出:

 Actually i fell very good

但相反,我得到了这个输出:

 Actually i fell very #{@feel}

我做错了什么?

4

4 回答 4

0

老实说,插入来自用户的任意字符串并不是太安全。基本上它与使用Kernel#eval(这将适用于您的情况)相同......用户可以放置他们想要的任何东西,并且非常容易滥用和破坏您的系统。从技术上讲,您可以通过简单地过滤掉他们键入的引号来做一些事情,但老实说,这是一个糟糕的选择。

你可以做的是用 做一个字符串替换#{@feel}@feel如果@feel是你唯一允许他们插值的事情:

puts a.gsub('#{@feel}',@feel)
于 2013-09-13T10:26:02.423 回答
0

简单的答案是你不能。

插值发生在运行时,所以即使你可以让它工作,@feel 在你输入它的时候也会是零。

你会更好地做这样的事情:

puts "Enter your feeling"
a = gets.chomp
@feel = "good"
puts a.gsub("##feel##",@feel)

然后问你感觉如何:

   Actually I feel very ##feel##
于 2013-09-13T10:22:32.167 回答
0

“#{@感觉}”

可能这就是你需要我的感觉

并尝试遵循命名约定。

于 2013-09-13T08:56:20.677 回答
0

代替

puts a

它应该是

puts "Actually i feel very " + @feel
于 2013-09-13T08:17:25.637 回答