在Ruby中如何模拟Python的命名printf参数?

Python中,您可以这样做:
print "Hi!  I'm %(name)s,and I'm %(age)d years old." % ({"name":"Brian","age":30})

什么是最接近,最简单的Ruby成语来复制这个行为? (请不要monkeypatching String类.)

编辑:其中一个非常好的优点是您可以将预处理的字符串存储在变量中,并将其用作“模板”,如下所示:

template = "Hi!  I'm %(name)s,and I'm %(age)d years old."
def greet(template,name,age):
    print template % ({"name":name,"age":age})

这显然是一个微不足道的例子,但是能够存储这样的字符串以供以后使用有很多实用性. Ruby的“嗨!我#{name}”约定是非常相似的,但立即评估使它不那么通用.

请不要拒绝提出#{var}技术的答案,因为它们来自此编辑之前. (随机想法内核:如果一个问题作者将它们标记为“过时的”,答案应该被保护不被投票?

解决方法

你也可以使用
printf "1: %<key1>s 2: %<key2>s\n",{:key1 => "value1",:key2 => "value2"}

要么

data = {:key1 => "value1",:key2 => "value2"}
printf "1: %<key1>s 2: %<key2>s\n",data

或者(这需要ruby 1.9,其他的例子我不太清楚)

data = {key1: "value1",key2: "value2"}
printf "1: %<key1>s 2: %<key2>s\n",data

打印

1: value1 2: value2

重要限制:哈希的使用密钥(我的示例中的数据)必须是符号.

以上例子的一个例子:
printf需要一个格式字符串和可选参数.但是也有一个String#% – 方法.

以下四个电话具有相同的结果:

printf "1: %<key1>s 2: %<key2>s\n",:key2 => "value2"}
printf "1: %<key1>s 2: %<key2>s\n" % {:key1 => "value1",:key2 => "value2"}
print  "1: %<key1>s 2: %<key2>s\n" % {:key1 => "value1",:key2 => "value2"}
puts   "1: %<key1>s 2: %<key2>s"   % {:key1 => "value1",:key2 => "value2"}

第二个版本首先使用String#% – 方法,并将结果发送到printf.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...