2013-12-18 105 views
1

我試圖使用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

你可以給你正在使用的寶石的鏈接? –

+0

@ArupRakshit statsample(1.3.0)。我已更新我的問題以包含一些其他詳細信息。 – Brandon

+0

在Gemfile中指定gem'statsample'只是爲了幫助管理依賴項(用於bundle安裝)。您仍然必須在代碼中明確要求。 –

回答

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

+0

由於某些原因,我的環境中不需要'statsample',即使它在我的Gemfile中。查看問題的更新。有什麼想法嗎? – Brandon

+0

是的,在大多數情況下(例如,編寫一個寶石),你必須手動要求'gem' –

+0

我在一個Rails環境中使用這個'Bundler.require',但仍然有這個問題。有什麼特定於'statsample'的東西與其他寶石不同? – Brandon

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」。

相關問題