2

私はルビーでこのテストをしています

describe "some silly block functions" do

  describe "reverser" do
    it "reverses the string returned by the default block" do
      result = reverser do
        "hello"
      end
      result.should == "olleh"
    end

    it "reverses each word in the string returned by the default block" do
      result = reverser do
        "hello dolly"
      end
      result.should == "olleh yllod"
    end
  end

ここに方法があります

def do_reverse(str)
 str = str.split 
 first_str = str[0].reverse
 second_str= str[1]
 if (second_str == nil)
  str = first_str.to_s
 else
 second_str = str[1].reverse
 str = (first_str +" "+ second_str)
 end 
end 

私がそれを実装できる最良の方法は何ですか。テストをレーキしようとすると失敗しましたが、メソッド自体は予約を返します。私は少し混乱しています。

4

5 に答える 5

0

これは機能します。必要なデータは「yield」に格納されます。

def reverser
  yield.gsub(/\w+/) { |w| w.each_char.to_a.reverse.join }
end
于 2013-06-29T03:14:27.237 に答える
0

そう。これを行う方法についての情報も探してここに来ました。言語が明確ではなかったので。オフサイトに行って調べたところ、テストに合格するのに十分な情報が見つかりました。

したがって、ブロックは、ルビの関数に続く中括弧の間のものです。たとえば、次のようになります。

list.each {|i| i.reverse}

したがって、仕様が行っていることは、それが実行されたときに何が起こるかを理解しようとしています:

rerverser {"hello"}

関数にyieldを入れると、ブロックにあるものは何でも返されるので、

def print_block
    puts yield
end

print_block {"Hello world."}

#=> "Hello world"

次に、引数を操作するのと同じように、yield を操作できます。ブロックには他にもたくさんあります。ここから始めるのが良いですが、これまでに Test First の Learn_ruby 演習をすべて解決した場合は、演習を解決するために知っておく必要があるのはこれだけです。

于 2014-09-17T17:43:34.897 に答える
0

私のリバース方法:

def reverser
    # yield is the string given in the block
    words = yield.split(' ')
    final = []
    words.each do |word|
        final.push(word.reverse)
    end
    final.join(' ')
end
于 2014-05-15T09:27:48.923 に答える