加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:01:53 所属栏目:百科 来源:网络整理
导读:在 Python中,您可以这样做: print "Hi! I'm %(name)s,and I'm %(age)d years old." % ({"name":"Brian","age":30}) 什么是最接近,最简单的Ruby成语来复制这个行为? (请不要monkeypatching String类.) 编辑:其中一个非常好的优点是您可以将预处理的字符串
在 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>sn",{:key1 => "value1",:key2 => "value2"}

要么

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

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

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

打印

1: value1 2: value2

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读