1

在尝试完成 about_method koans 时,我一直在第 39 行和第 42 行遇到“类型不匹配:给定字符串”错误。我的第一个问题是为什么会出现错误?我的第二个问题是我自己如何用 irb 解决这个问题?

公案

 require File.expand_path(File.dirname(__FILE__) + '/neo')

 def my_global_method(a,b)
   a + b
 end

    class AboutMethods < Neo::Koan

    def test_calling_global_methods_with_wrong_number_of_arguments
        exception = assert_raise(ArgumentError) do
          my_global_method
        end

        assert_match(/__/, exception.message)

        exception = assert_raise(ArgumentError) do
          my_global_method(1,2,3)
        end
        assert_match(/__/, exception.message)
      end
    #...
    end

错误与我的工作

A. 如果我将断言更改为

assert_match(/"参数个数错误(0 代表 2)"/, exception.message)

结果是:

预期“错误数量的参数(0 代表 2)”匹配 /“错误数量的参数(0 代表 2)”/

B.如果我将其更改为

assert_match("错误数量的参数 (0 代表 2)", exception.message)

结果是:

类型不匹配:给定字符串

我对两个 assert_match 行都得到了相同的结果。

4

3 回答 3

6
assert_match(/wrong number of arguments \(0 for 2\)/, exception.message)

没有双引号和转义括号。

于 2013-11-13T04:51:30.160 回答
2
/["wrong number of arguments (0 for 2)"]/ 

为我工作

于 2015-09-27T15:58:03.603 回答
1

第一个失败是因为括号是正则表达式中的特殊字符,所以你需要用反斜杠转义它们。正则表达式中还有引号,字符串中不存在引号。第二次失败可能是因为assert_match期望一个正则表达式作为第一个参数。

至于使用 irb 调试这些问题,您可以使用 irb 查看实际字符串是否与您提供的正则表达式匹配,如下所示:

2.0.0p247 :001 >  /"wrong number of arguments (0 for 2)"/ =~ "wrong number of arguments (0 for 2)"
 => nil

然后,您可以减少左右手边,直到它们匹配,然后添加回字符,直到找出问题字符为止。

我不确定 irb 如何帮助解决第二个问题。

于 2013-11-13T04:43:01.837 回答