Watir改变了highline的"ask"方法

gru*_*dic 4 ruby watir highline

当我一起使用Watir和Highline时,我已经遇到了一些奇怪的功能.

这是一个简单的例子:

require 'highline/import'
comp = ask("Company?  ") { |q| q.default = "MySuperCompany" }
puts comp

require 'watir'
comp = ask("Company?  ") { |q| q.default = "MySuperCompany" }
puts comp
Run Code Online (Sandbox Code Playgroud)

这是一个输出:

Company?  |MySuperCompany|
MySuperCompany
[Company?  ] =>
Company?
Run Code Online (Sandbox Code Playgroud)

也许这是一个错误?我也在highline的文档中找到了

如果在调用ask()之前设置了@question,则忽略参数,并使用该对象(必须是HighLine :: Question)来驱动进程.

对不起,我不是红宝石大师:-(

Jar*_*man 5

证实.它真的表现得那样.

Željko:http://highline.rubyforge.org/

grundic:问题与Watir本身无关,但它与另一个名为s4t-utils的库(http://s4t-utils.rubyforge.org/)有关,该库也有一个类似于HighLine的"ask"方法"问".s4t-utils是gem"用户选择"的依赖,而后者依赖于"commonwatir",这是Watir的依赖.因此,在发出"require'watir'"后,加载s4t-utils,从而覆盖"ask"方法.

您可以使用HighLine.new.ask而不是"ask"来解决问题:

require "highline/import"
comp = ask("Company?  ") { |q| q.default = "MySuperCompany" }
puts comp

require 'watir'
comp = ask("Company?  ") { |q| q.default = "MySuperCompany" }
puts comp

comp = HighLine.new.ask("Company?  ") { |q| q.default = "MySuperCompany" }
puts comp
Run Code Online (Sandbox Code Playgroud)

生产:

Company?  |MySuperCompany|  my
my
[Company?  ] => my
my
Company?  |MySuperCompany|  my
my
Run Code Online (Sandbox Code Playgroud)

Jarmo Pertman