我正在鍛鍊exerciseism.io。這是在規格文件中要求:Minitest錯誤 - ArgumentError:錯誤的參數數量(給定1,預期0)
- 該
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
我如何定義一個不需要參數的方法?
這是我一直在尋找的解決方案。謝謝!所有三個斷言都通過了。我正在掛上Minitest的輸出文字。 –
正確,所以從測試中學習如何使用和不使用參數調用相同的方法,這是一個很好的學習。你的解決方案中大多數你不需要(目前)...初始化和'say_hello'以及創建新對象。通常最好不要編碼,直到你需要它通過測試。 – SteveTurczyn
這很有道理,謝謝史蒂夫。根據我目前的經驗,這是我覺得我可以完成目標的唯一途徑。爲參數定義一個默認值很有意義! –