我正在尝试使用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
。
有什么想法吗?
答案 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 ”