参数应该是一个向量

时间:2013-12-18 13:26:33

标签: ruby arrays vector

我正在尝试使用statsample库,但是数组/向量存在问题。

b = [2,3,4,5,6,7].to_scale
# => #<TypeError: Argument should be a Vector>

你知道为什么我会收到这个错误吗?

编辑1

在我的环境中发生了奇怪的事情......

$ irb
irb(main):001:0> require 'statsample'
=> true
irb(main):004:0> b = [2,3,4,5,6,7].to_scale
=> Vector(type:scale, n:6)[2,3,4,5,6,7]
exit

$ bundle exec irb
irb(main):001:0> b = [2,3,4,5,6,7].to_scale
NoMethodError: undefined method `to_scale' for [2, 3, 4, 5, 6, 7]:Array
    from (irb):1
    from /Users/brandon/.rbenv/versions/1.9.3-p484/bin/irb:12:in `<main>'
irb(main):002:0> 

由于某些原因,当我使用statsample时,不需要bundle exec。我必须在我的代码中手动require 'statsample,即使gem 'statsample中有Gemfile

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我没有看到这个问题:

irb(main):004:0> require 'statsample'
=> true

irb(main):004:0> b = [2,3,4,5,6,7].to_scale
=> Vector(type:scale, n:6)[2,3,4,5,6,7]

请确保如果您使用bundler,请将Gemfile放入以下内容:

gem 'statsample'

执行bundle install

答案 1 :(得分:0)

根据源代码:

module Statsample::VectorShorthands
  # Creates a new Statsample::Vector object
  # Argument should be equal to Vector.new
  def to_vector(*args)
                Statsample::Vector.new(self,*args)
        end
  # Creates a new Statsample::Vector object of type :scale
  def to_scale(*args)
    Statsample::Vector.new(self, :scale, *args)
  end
end

class Array
  include Statsample::VectorShorthands
end

所以我的猜测是:

如果它只是[Array].to_scale,它应该没有任何问题。除非你将任何参数传递给 to_scale (),而不是Vector类型,因为在它内部调用Statsample::Vector.new(self, :scale, *args),并且它说“参数应该等于Vector.new