【问题标题】:Only one array is returned where I am expecting array of array in Ruby在我期望 Ruby 中的数组数组的位置只返回一个数组
【发布时间】:2014-04-11 22:36:42
【问题描述】:

当我在 irb 中运行以下命令时,它会返回我想要的。但是当我运行rspec -c intersection_spec.rb 时,它会返回[[0,0]]。为什么我使用 rspec 没有得到想要的结果?

我在这里做错了什么?

intersection.rb

class Intersection

  def self.create_arr(xa1, ya1, xa2, ya2)
    ((xa1.to_i)..(xa2.to_i)).to_a.product(((ya1.to_i)..(ya2.to_i)).to_a)
  end

end

intersection_spec.rb

require './spec_helper'
require './intersection.rb'

describe Intersection do

  @xa1 = 0.0
  @ya1 = 0.0
  @xa2 = 5.0
  @ya2 = 5.0
  @xb1 = 1.0 
  @yb1 = 1.0
  @xb2 = 4.0
  @yb2 = 4.0

  specify{ expect(Intersection.create_arr(@xa1, @ya1, @xa2, @ya2)).to eq [[0,0], 
[0,1], [0,2], [0,3], [0,4], [0,5], [1,0], [1,1], [1,2], [1,3], [1,4], [1,5], 
[2,0], [2,1], [2,2], [2,3], [2,4], [2,5], [3,0], [3,1], [3,2], [3,3], [3,4], 
[3,5], [4,0], [4,1], [4,2], [4,3], [4,4], [4,5], [5,0], [5,1], [5,2], [5,3], 
[5,4], [5,5]] }

end

运行 rspec。

rspec -c intersection_spec.rb

   expected: [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [1, 0], [1, 1], 
[1, 2], [1, 3], [1, 4], [1, 5], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], 
[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [4, 0], [4, 1], [4, 2], [4, 3], 
[4, 4], [4, 5], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5]]
got: [[0, 0]]

在 irb 中

irb(main):029:0>   @xa1 = 0.0
=> 0.0
irb(main):030:0>   @ya1 = 0.0
=> 0.0
irb(main):031:0>   @xa2 = 5.0
=> 5.0
irb(main):032:0>   @ya2 = 5.0
=> 5.0
irb(main):033:0>   @xb1 = 1.0
=> 1.0
irb(main):034:0>   @yb1 = 1.0
=> 1.0
irb(main):035:0>   @xb2 = 4.0
=> 4.0
irb(main):036:0>   @yb2 = 4.0
=> 4.0
irb(main):037:0> def self.create_arr(xa1, ya1, xa2, ya2)
irb(main):038:1>     ((xa1.to_i)..(xa2.to_i)).to_a.product(((ya1.to_i)..(ya2.to_i)).to_a)
irb(main):039:1>   end
=> nil
irb(main):040:0> create_arr(@xa1, @ya1, @xa2, @ya2)
=> [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [1, 0], [1, 1], [1, 2], 
[1, 3], [1, 4], [1, 5], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [3, 0], 
[3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], 
[4, 5], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5]]

【问题讨论】:

  • 没有理由这样做。 rspec 与 irb 在相同环境下运行时的结果相同。

标签: ruby arrays


【解决方案1】:

我不能确定为什么它会失败,但我注意到当你不创建初始坐标实例变量时它确实有效,所以

  @xa1 = 0.0
  @ya1 = 0.0
  @xa2 = 5.0
  @ya2 = 5.0

变成

  xa1 = 0.0
  ya1 = 0.0
  xa2 = 5.0
  ya2 = 5.0

然后将它们传递给#create_array。

【讨论】:

    猜你喜欢
    • 2022-07-23
    • 1970-01-01
    • 2020-06-26
    • 2019-07-21
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2019-12-28
    相关资源
    最近更新 更多