RubyKoans 113/282 - 类型不匹配:给出的字符串/我怎么能用irb解决自己?

时间:2013-11-13 04:29:43

标签: ruby

当试图完成about_method koans时,我继续遇到第39行和第39行的“类型不匹配:字符串给定”错误我的第一个问题是错误原因?我的第二个问题是我怎么能用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

错误&amp;我的工作

一个。如果我将断言更改为

  

assert_match(/“错误的参数数量(0表示2)”/,exception.message)

导致:

  

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

B中。如果我将其更改为

  

assert_match(“错误的参数数量(0表示2)”,exception.message)

导致:

  

type mismatch:给定字符串

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

3 个答案:

答案 0 :(得分:6)

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

没有双引号和转义括号。

答案 1 :(得分:2)

/["wrong number of arguments (0 for 2)"]/ 

为我工作

答案 2 :(得分:0)

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

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

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

然后,您可以向左和向右缩小,直到它们匹配,然后添加回字符,直到您找到问题字符。

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