ArgumentError:参数数量错误(给定0,预期为1) - Ruby

时间:2016-11-03 12:58:01

标签: ruby

我有一个测试套件(hellow_world_test.rb),其中包含以下内容

#!/usr/bin/env ruby
begin
  gem 'minitest', '>= 5.0.0'
  require 'minitest/autorun'
  require_relative 'hello_world'
rescue Gem::LoadError => e
  puts "\nMissing Dependency:\n#{e.backtrace.first} #{e.message}"
  puts 'Minitest 5.0 gem must be installed for the xRuby track.'
rescue LoadError => e
  puts "\nError:\n#{e.backtrace.first} #{e.message}"
  puts DATA.read
  exit 1
end

# Test data version:
# deb225e Implement canonical dataset for scrabble-score problem (#255)

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

__END__

在此基础上我实现了如下代码

class HelloWorld
    def self.hello
        "Hello, World!"
    end

    def self.hello(named)
        "Hello, #{named}!"
    end
end

现在我的两个测试用例正在通过,第一个测试用例正在返回

  

ArgumentError:参数数量错误(给定0,预期为1)       /Users/vijay/Codes/Ruby/ruby/hello-world/hello_world.rb:7:in hello' hello_world_test.rb:21:in test_no_name'

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:4)

Ruby中的params没有方法重载。使用第二个hello定义,您将覆盖第一个。{1}}。无论如何,只使用一个带参数默认值的方法就可以获得相同的行为。

def self.hello(named = 'World')
  "Hello, #{named}!"
end