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

前端之家收集整理的这篇文章主要介绍了在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.

原文链接:https://www.f2er.com/ruby/266506.html

猜你在找的Ruby相关文章