当试图完成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
错误和我的工作
一个。如果我将断言更改为
assert_match(/"错误的参数数(0 表示 2)"/, exception.message)
它导致:
预期"错误的参数数(0 表示 2)"匹配/"错误的参数数(0 表示 2)"/
二.如果我将其更改为
assert_match("错误的参数数(0 表示 2)",异常消息)
它导致:
类型不匹配:给定字符串
我得到两行assert_match相同的结果。
assert_match(/wrong number of arguments (0 for 2)/, exception.message)
没有双引号和转义括号。
第一个失败是因为括号是正则表达式中的特殊字符,所以你需要用反斜杠转义它们。正则表达式中也有引号,字符串中不存在引号。 第二次失败可能是因为assert_match
期望正则表达式作为第一个参数。
调试这些问题,您可以使用 irb 来查看实际字符串是否与您提供的正则表达式匹配,如下所示:
2.0.0p247 :001 > /"wrong number of arguments (0 for 2)"/ =~ "wrong number of arguments (0 for 2)"
=> nil
然后,您可以减少左侧和右侧,直到它们匹配,然后添加回字符,直到您找出有问题的字符。
我不确定irb如何帮助解决第二个问题。
/["wrong number of arguments (0 for 2)"]/
为我工作