【问题标题】:Running Ruby as index.cgi, [1,3,5].shuffle always yield the same result将 Ruby 作为 index.cgi 运行,[1,3,5].shuffle 总是产生相同的结果
【发布时间】:2010-06-27 10:47:25
【问题描述】:

我确实转储了 RUBY_VERSION => 1.8.7 的值

每次[1,3,5].shuffle的值也是[1,3,5] 我必须在它前面添加一个 srand(Time.now.to_i) 或 srand() 以使其随机... 我以为 srand 会自动调用?但可能不在 .cgi 环境中?

如果我用irb,看看[1,3,5].shuffle,退出,重新进入irb,每次结果都不一样。

顺便说一句,ri shuffle 没有给出任何内容,而且 Array 和 Enumerable 文档也没有列出 shuffle 或 shuffle!要么……?

【问题讨论】:

    标签: ruby erb shuffle srand


    【解决方案1】:

    由于我看不到您如何检查它是否已更改,因此我不能肯定地说,但我希望问题必须处理您如何检查它是否已更改。如果您使用随机播放,则不会改变原始数组。所以如果你检查的是原始数组的值而不是返回的结果,就会出现该方法每次都返回相同的值

    RUBY_VERSION    # => "1.8.7"
    
    a = [1,3,5]
    
    # a does not change, because shuffle does not mutate
    a.shuffle       # => [5, 1, 3]
    a               # => [1, 3, 5]
    
    # now a does change, because shuffle! does mutate
    a.shuffle!  # => [5, 3, 1]
    a           # => [5, 3, 1]
    

    另外,这里是文档http://ruby-doc.org/core-1.8.7/classes/Array.html#M000335

    【讨论】:

    • 实际上,在.cgi 中,我做了p [1,3,5].shuffle.inspect,所以我们正在查看新数组。另外,我也试过shuffle!。如果我正在查看旧数组,则输入 srand 不会有帮助,对吧?
    • 顺便说一句,ruby-doc.org/core 实际上是 1.8.6,所以没有洗牌
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2022-10-31
    • 2021-11-09
    相关资源
    最近更新 更多