2

我正在努力学习 Ruby,并且已经完成了 Zed Shaw 的 Learn Ruby the Hard Way 的大部分内容,但是这个最新的练习让我完全难过。这是一种反向练习,让您创建一个可以通过提供的代码进行测试的类 Lexicon。

您应该创建 Lexicon 以便它可以通过用户输入并从中获取各种数据。到目前为止,我所拥有的所有测试方向输入,例如:

class Lexicon

Pair = Struct.new(:qualifier, :value)
userinput = gets.chomp()
userwords = userinput.split()

for i in userwords
    if userwords[i].include?("north", "south", "east", "west")
        directions = Pair.new("direction", userwords[i])
    else
        i++
    end
end     
end

对应的测试代码为:

require 'test/unit'
require_relative "../lib/lexicon"

class LexiconTests < Test::Unit::TestCase

Pair = Lexicon::Pair
@@lexicon = Lexicon.new()

def test_directions()
assert_equal([Pair.new(:direction, 'north')], @@lexicon.scan("north"))
result = @@lexicon.scan("north south east")
assert_equal(result, [Pair.new(:direction, 'north'),
             Pair.new(:direction, 'south'),
             Pair.new(:direction, 'east')])
end

提前感谢大家的帮助。我知道我可能还很遥远,但我正在努力完成学习 Ruby 的艰难之路!

4

1 回答 1

1

您应该将 for 循环包装在 scan 方法中,因为这是测试用例所期望的。scan 方法还需要返回“Pairs”列表。

尝试这样的事情。

def scan(userwords)
  sentence = Array.new
  userwords.each { |word|
    if word.include?("north", "south", "east", "west")
      sentence.push(Pair.new(:direction, word))
  }
  sentence
end 

这应该可以帮助您朝着正确的方向开始。

于 2014-06-03T05:16:52.760 回答