1

Ruby 新手在这里学习each全栈在线程序 Bloc 中的方法和循环。这个特定的问题已经在这里讨论过,但是我收到的错误信息与那个帖子不同,我不知道为什么。

在说明中,class StringModifier“在初始化时获取一个字符串”和实例方法proclaim“将字符串拆分为一个单独的单词数组,为每个单词添加一个感叹号,然后用空格将它们重新连接在一起并返回新字符串。”

我不断收到 irb 中的错误ArgumentError wrong number of arguments (0 for 1)。我不确定我在哪里没有声明一个论点。这不是初始化string变量的目的吗?这是我关于 SO 的第一个问题,因此任何帮助或指向正确方向的建议都将不胜感激。下面的代码和规范脚本:

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim(string)
    new_array = []
    string.each do |x|
      new_array << "#{x.split(' ').join('!')}"
    end
    new_array
  end
end

这是规范脚本:

describe StringModifier do
  describe "#proclaim" do
    it "adds an exclamation mark after each word" do
      blitzkrieg_bop = StringModifier.new("Hey ho let's go").proclaim
      expect(blitzkrieg_bop).to eq("Hey! ho! let's! go!")
    end
  end
4

2 回答 2

2

您的proclaim方法需要再次传入字符串。这不是必需的,因为您已经在初始化时存储了字符串。您的代码似乎也包含一些问题,可以简化。试试这个:

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim
    @string.split(' ').join('! ').concat('!')
  end
end
于 2015-03-21T13:54:37.667 回答
0

这对我有用。我自己正在学习 Bloc Ruby 课程。

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim
    new_array = []
    string.split.each do |word|
      new_array << "#{word}!"
    end
    new_array.join(" ")
  end
end
于 2015-10-12T00:23:47.673 回答