我写了一个小演示代码,向您展示我的问题:
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}
我做错了什么?
我写了一个小演示代码,向您展示我的问题:
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}
我做错了什么?
老实说,插入来自用户的任意字符串并不是太安全。基本上它与使用Kernel#eval(这将适用于您的情况)相同......用户可以放置他们想要的任何东西,并且非常容易滥用和破坏您的系统。从技术上讲,您可以通过简单地过滤掉他们键入的引号来做一些事情,但老实说,这是一个糟糕的选择。
你可以做的是用 做一个字符串替换#{@feel}
,@feel
如果@feel
是你唯一允许他们插值的事情:
puts a.gsub('#{@feel}',@feel)
简单的答案是你不能。
插值发生在运行时,所以即使你可以让它工作,@feel 在你输入它的时候也会是零。
你会更好地做这样的事情:
puts "Enter your feeling"
a = gets.chomp
@feel = "good"
puts a.gsub("##feel##",@feel)
然后问你感觉如何:
Actually I feel very ##feel##
“#{@感觉}”
可能这就是你需要我的感觉。
并尝试遵循命名约定。
代替
puts a
它应该是
puts "Actually i feel very " + @feel