在
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.