【问题标题】:Don't understand a bit of code RUBY = [*?a..?z]有点看不懂代码 RUBY = [*?a..?z]
【发布时间】:2017-07-31 15:09:16
【问题描述】:

几年前我发现了这段代码。 我了解此代码的作用,但不了解如何。 谁能解释*? 在这里做什么?我以前从未见过它们被这样使用过。

myarr = [*?a..?z]       #generates an array of strings for each letter a to z
myarr = [*?a..?z] + [*?0..?9] # array of strings a-z and 0-9

【问题讨论】:

  • Star & Question Mark 在 Ruby 中
  • 仅供参考:[*?a..?z] + [*?0..?9] 可以合并为一个 [*?a..?z, *?0..?9]
  • 是的,谢谢,我实际上并没有使用这段代码,我只是好奇幕后发生了什么

标签: ruby


【解决方案1】:

? 只是一个字符字面语法,它曾经在 ruby​​ ?a 与 "a" 一样

然后.. 正在创建一个Range* 只是将其扩展为一个参数列表,[ ] 对将其转换为一个数组。

希望我的 google-fu 足以获得一些不错的文档链接或解释,但搜索这些链接非常困难。

更新:?a 实际上与"a" 相同,而不是前面提到的'a'。要查看此运行(留下 IRB 标记以帮助说明正在发生的事情):

irb(main):001:0> print ?\t
    => nil
irb(main):002:0> print "\t"
    => nil
irb(main):003:0> print '\t'
\t=> nil
irb(main):004:0> 

【讨论】:

  • 更具体地说,* 将范围扩展为参数列表,[...] 将这些参数转换为数组。
  • 为了完整起见,我要提一下,这些天它通常是在*('a'..'z')('a'..'z').to_a 完成的。
  • @Mark,也许很明显,但我要注意*('a'..'z') 只能用作参数;对于作业,a = [*('a'..'z')]a = ('a'..'z').to_a
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 2021-08-22
  • 2017-10-13
  • 2023-03-28
  • 1970-01-01
  • 2013-04-07
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多