带格式说明符的命名格式字符串参数

Aje*_*i32 10 ruby

在Ruby中,您可以使用该String#%方法将参数替换为C样式的格式字符串,如下所示:

'%.3d can be expressed in binary as %b' % [30, 30]
#=> "030 can be expressed in binary as 11110"
Run Code Online (Sandbox Code Playgroud)

Kernel#sprintfKernel#format行为相似:

sprintf('%.3d can be expressed in binary as %b', 30, 30)
#=> "030 can be expressed in binary as 11110"

format('%.3d can be expressed in binary as %b', 30, 30)
#=> "030 can be expressed in binary as 11110"
Run Code Online (Sandbox Code Playgroud)

Ruby还提供了在此格式字符串中使用命名参数的功能:

'Hello, %{first_name} %{last_name}!' % {first_name: 'John', last_name: 'Doe'}
#=> "Hello, John Doe!"
Run Code Online (Sandbox Code Playgroud)

但有没有办法一起使用这些功能?例如:

'%{num}.3d can be expressed in binary as %{num}b' % {num: 30}
# I want: "030 can be expressed in binary as 11110"
# Actual: "30.3d can be expressed in binary as 30b"
Run Code Online (Sandbox Code Playgroud)

换句话说,有没有办法在带有命名参数的格式字符串中使用标志,宽度说明符,精度说明符和类型?%[flags][width][.precision]type如果我想给格式序列命名,那么形式是什么?

Uri*_*ssi 15

试试这个:

'%<num>.3d can be expressed in binary as %<num>b' % {num: 30}
# => "030 can be expressed in binary as 11110"
Run Code Online (Sandbox Code Playgroud)