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