我正在练习exercise.io。这在规范文档中要求:
Hello World!
程序会问候我,来电者。class HelloWorldTest < Minitest::Test
def test_no_name
assert_equal 'Hello, World!', HelloWorld.hello
end
def test_sample_name
assert_equal 'Hello, Alice!', HelloWorld.hello('Alice')
end
def test_other_sample_name
assert_equal 'Hello, Bob!', HelloWorld.hello('Bob')
end
end
这是我的计划:
class HelloWorld
def self.hello
"Hello, World!"
end
def initialize(name)
@name = name
end
def say_hello
puts "Hello, #{@name}!"
end
end
print "Give me your name: "
your_name = gets.chomp
hello = HelloWorld.new(your_name)
if your_name == ""
puts "Hello, World!"
else
hello.say_hello
end
程序运行并满足所有要求,但我收到错误:
1) Error:
HelloWorldTest#test_sample_name:
ArgumentError: wrong number of arguments (given 1, expected 0)
/Users/drempel/exercism/ruby/hello-world/hello_world.rb:3:in `hello'
hello_world_test.rb:24:in `test_sample_name'
3 runs, 1 assertions, 0 failures, 1 errors, 1 skips
如何定义不需要参数的方法?
答案 0 :(得分:3)
如何定义不需要参数的方法?
你的问题恰恰相反。您正在将参数传递给方法HelloWorld.hello
,该方法不接受参数。
您的测试代码与源代码的行为不符。将源代码更改为:
class HelloWorld
def self.hello(name = "World")
"Hello, #{name}!"
end
end
此处,name = "World"
表示name
参数是可选的,默认值为"World"
。
或者,将测试更改为:
assert_equal 'Hello, Alice!', HelloWorld.new('Alice').say_hello
assert_equal 'Hello, Bob!', HelloWorld.new('Bob').say_hello
答案 1 :(得分:1)
有时在测试中你说
HelloWorld.hello('Alice')
您在测试中的其他时间
HelloWorld.hello
所以你要调用方法&#34;你好&#34;有和没有争论。
要使参数可选,您可以为它们指定默认值。
def self.hello(name_to_use=nil)
if name_to_use
"Hello, #{name_to_use}!"
else
"Hello, World!"
end
end
答案 2 :(得分:0)
如何定义不需要参数的方法?
了解错误消息的含义非常重要,因为我在Learn.co&#39; s Object-Oriented TicTacToe challenge上遇到了类似的问题。当您的代码针对测试代码运行时,测试代码是&#34;给出&#34; 'Alice'
方法#self.hello
的一个参数。但是你所编写的#self.hello
方法正好需要零参数。因此:
ArgumentError: wrong number of arguments (given 1, expected 0)
/Users/drempel/exercism/ruby/hello-world/hello_world.rb:3:in `hello'
hello_world_test.rb:24:in `test_sample_name'
我的错误信息类似,我有同样的思路:&#34;如果它预期为0,我怎么能给它0?&#34;显然,从我们的经验中得到的关键是更好地理解错误信息的含义。