【问题标题】:Adding several items to a Hash in Ruby在 Ruby 中将多个项目添加到哈希中
【发布时间】:2013-06-15 01:35:52
【问题描述】:

我是一名 ruby​​ 初学者,我将创建自己的控制台推特,每当用户发推文时,应用程序都会将推文存储在哈希中。

最初我能够通过使用成功地做到这一点

timeline = []

puts "Write your tweet"

newTweet = gets.chomp

date =DateTime.now.strftime("%d/%m/%Y %H%:%M")

@timeline << { :timestamp => date , :tweet => newTweet  }

但是我被告知通过使用 => 我使用的是旧的 ruby​​ 标准,所以我想通过使用以下代码来增强它:

@timeline << { timestamp: date , tweet: newTweet  }

不幸的是,我收到该行代码的以下错误消息:语法错误,意外':',期待'='

我也对如何声明变量时间线有疑问

@timeline = []
@timeline = {}
@timeline = Hash.new

非常感谢。

【问题讨论】:

  • 输入ruby --version会得到什么?

标签: ruby hash push


【解决方案1】:

哈希的冒号表示法是在 1.9.x 版的 Ruby 中引入的。如果新语法出错,您可能使用的是 1.8.7 版本。

哈希用大括号括起来 ({})。 数组括在方括号中 ([])。

您可以通过几种不同的方式创建新的哈希。两者都很好:

my_hash1 = Hash.new
my_hash2 = {}

您可以通过几种不同的方式创建类似的新数组:

my_array1 = Array.new
my_array2 = []

在您的示例中,您有一个哈希数组。看起来像(使用替代的新语法):

timeline = [ {timestamp: tweet_date, tweet: tweet_text}, {...}, ..., {...} ]

或者使用原始语法:

timeline = [ {:timestamp => tweet_date, :tweet => tweet_text}, {...}, ..., {...} ]

原始语法与替代语法没有任何问题。它与更高版本的 Ruby 向前兼容。只是有点冗长。

因此,要将timeline 用作哈希数组,它首先是一个数组,并且会这样创建,例如timeline = []。然后您可以通过以下方式将散列元素加载到其中:

timeline << { timestamp: tweet_date, tweet: tweet_text }

【讨论】:

  • @muistooshort 抱歉,我选词不当。我确实说过“旧”(备用)语法仍然有效,这意味着备用。我相应地编辑了我的答案。
  • @muistooshort “旧”并不一定意味着它已经过时。它已经在那里很久了,所以它很旧。这个表达没有错。
  • 感谢您的回答@mbratch。
  • @mbratch 不幸的是,我遇到了同样的错误,还有一个新错误:Hash 的奇数列表 这是我的完整代码,它是西班牙语,但代码是自我解释的:[链接]( bit.ly/14CV0nt) 只是为了记录,我正在运行 ruby​​ 1.9
猜你喜欢
  • 1970-01-01
  • 2022-10-19
  • 2021-10-21
  • 1970-01-01
  • 2011-06-21
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多