specialChars = "]%#$!_.+?~&[*/^;@"
puts(specialChars[16])
打印一个空白行。为什么会这样?我是否需要逃避一些角色?
答案 0 :(得分:6)
#
是用“>
# Example
puts "My name is #{my_name}!"
如果使用''而不是“”,则禁用字符串插值,您可以正常使用它:
# The "" has been replaced with ''
specialChars = ']%#$!_.+?~&[*/^;@'
puts specialChars[16]
# => '@'
答案 1 :(得分:0)
Aaron Cronin说得对:#$!
被解释为字符串插值命令。你应该在IRB中运行这样的Ruby代码,这样你就可以很容易地看到结果:
irb(main):001:0> specialChars = "]%#$!_.+?~&[*/^;@"
=> "]%_.+?~&[*/^;@"
查看结果的另一种方法是运行p specialChars
或等效puts specialChars.inspect
。使用这些技术检查行为奇怪的物体是一个好习惯。
井号(#)通常在字符串中允许,但如果它在双引号字符串中后跟$
,那么它将进行字符串插值。在您的情况下,它抓取全局变量$!
,将其转换为带有.to_s
的字符串,并将其粘贴在字符串中。您的代码相当于:
specialChars = "]%#{$!}_.+?~&[*/^;@"
以下是字符串插值的更多示例:
"Hello, #{name}!" # method or local variable
"Hello, #@name!" # instance variable
"Hello, #$name!" # global variable
答案 2 :(得分:0)
正如其他答案所说,当跟随字符#
或$
时,字符@
被解释为插值。除了使用单引号来避免这种情况之外,另一种方法是重新排列字符,例如:
"]%#!_.+?~&[*/^;@$"