如何在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

如何在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(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
都解释字符串中的
%
s
printf 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
都解释字符串中的
%
s
printf s%args
调用
String#%
然后将该方法的结果作为格式字符串提供给
printf
,因此您实际上是在说
将sprintf(sprintf(s,args))
,这有点奇怪。现在我明白了。我没有意识到
%
是一个字符串方法:我认为它只是
printf
语法的一个奇怪部分。