2011-11-19 62 views
2

我正在研究一種可以使用不同版本的小黃瓜的gem,但我面臨一個問題:在2.4.0版本中使用 Gherkin :: Formatter :: Model: :Scenario.new需要6個參數,但在2.6.5中需要7個參數。在Ruby中使用正確數量的參數new

所以我的問題是這種情況下的最佳做法是什麼?我應該怎麼做:

case Gherkin::Version 
when '2.4.0' 
    do the init with 6 arguments 
else 
    with the 7 
end 

我也在想創造一個new_with_arity方法:

class Object 
    def new_with_arity(*params) 
    puts method(:initialize).arity # => -1 
    puts method(:new).arity  # => -1 
    new(*(params + [nil] * (params.count - method(:new).arity))) 
    end 
end 

然而,這並不工作,新的元數和初始化爲-1。 你有想法嗎?

回答

1

我會推薦以下Jim Deville的建議。說這是一個非常有趣的想法,而且你非常接近。問題是沒有實例就無法獲得方法,所以訣竅是首先使用allocate。

class Object 
    def new_with_arity(*params) 
    new *(params + [nil] * (allocate.method(:initialize).arity - params.size)) 
    end 
end 


class One 
    def initialize a 
    [a] 
    end 
end 

class Two 
    def initialize a, b 
    [a, b] 
    end 
end 

One.new_with_arity 1  #=> [1] 
Two.new_with_arity 1, 2 #=> [1, 2] 
Two.new_with_arity 1  #=> [1, nil] 
+0

謝謝你好:) – jrichardlai

2

我會構建2個小黃瓜適配器,併爲適當的版本加載適當的適配器。或者,您正在使用Rubygems,因此您可以強制使用特定版本的Gherkin解析器。

相關問題