如何在Ruby中正确转义printf调用中的%s?
如何在Ruby中正确转义printf调用中的%s 当我尝试使用如何在Ruby中正确转义printf调用中的%s?,ruby,formatting,escaping,printf,string-formatting,Ruby,Formatting,Escaping,Printf,String Formatting,如何在Ruby中正确转义printf调用中的%s 当我尝试使用%%(如C中所示)时 我得到这个错误: $ ruby /tmp/test.rb /tmp/test.rb:4:in `printf': malformed format string - %t (ArgumentError) from /tmp/test.rb:4:in `<main>' $ruby/tmp/test.rb /tmp/test.rb:4:'printf'中:格式错误的字符串-%t(Argumen
%%
(如C中所示)时
我得到这个错误:
$ ruby /tmp/test.rb
/tmp/test.rb:4:in `printf': malformed format string - %t (ArgumentError)
from /tmp/test.rb:4:in `<main>'
$ruby/tmp/test.rb
/tmp/test.rb:4:'printf'中:格式错误的字符串-%t(ArgumentError)
from/tmp/test.rb:4:in`'
在检查字符串的格式参数之前,
%%
似乎被插入字符串中(即“..%%test…”
”似乎被解释为“..%test…”
”;但是,我不知道设置格式字符串的正确方法。您应该将值作为参数传递给printf
printf "To have a 60%% test average, your final exam must be at least %0.2f.\n",value
您应该将值作为参数传递给printf
printf "To have a 60%% test average, your final exam must be at least %0.2f.\n",value
printf“…”%[p1,p2]
和printf“…”,p1
之间有什么区别。在Ruby中,字符串的%运算符是一个格式运算符。通过执行%06d”%100
,可以在不使用printf的情况下格式化字符串-我不确定将数组作为参数传递给printf的原因。有一些高级主题,比如将数组作为函数参数列表传递,但为了简单起见,为字符串中的每种格式向printf语句传递一个值,这对每个人来说都很容易理解。@Zack-看起来数组语法是用于将多个参数传递给%
运算符的-如果在最后一条注释上正确使用%
,您甚至不需要printf
。String#%
和Kernel#printf
都解释字符串中的%
sprintf s%args
调用String#%
然后将该方法的结果作为格式字符串提供给printf
,因此您实际上是在说将sprintf(sprintf(s,args))
,这有点奇怪。现在我明白了。我没有意识到%
是一个字符串方法:我认为它只是printf
语法中的一个奇怪部分。printf“…”[p1,p2]和printf”…,p1
之间有什么区别。在Ruby中,字符串的%运算符是一个格式运算符。通过执行%06d”%100
,可以在不使用printf的情况下格式化字符串-我不确定将数组作为参数传递给printf的原因。有一些高级主题,比如将数组作为函数参数列表传递,但为了简单起见,为字符串中的每种格式向printf语句传递一个值,这对每个人来说都很容易理解。@Zack-看起来数组语法是用于将多个参数传递给%
运算符的-如果在最后一条注释上正确使用%
,您甚至不需要printf
。String#%
和Kernel#printf
都解释字符串中的%
sprintf s%args
调用String#%
然后将该方法的结果作为格式字符串提供给printf
,因此您实际上是在说将sprintf(sprintf(s,args))
,这有点奇怪。现在我明白了。我没有意识到%
是一个字符串方法:我认为它只是printf
语法的一个奇怪部分。