2016-08-07 8 views
-1

私は基本的なトレーニングの練習を解決しています。私はにする必要があります各単語の最初の文字を最後に移動し、単語の最後に 'ay'を追加します。。私はグーグルと、このコードを思い付いてきた:ベーシックピッグラテン| .eachとのトラブル

-e

def pig_it translate_pig_latin 
    move_letters = text.split(' ') 
         .each do {|x| x[1..-1] << x.[0] << 'ay' } 
    move_letters.join(' ') 
end 

しかし、いくつかの理由で、それは私にこのエラーを与える:4:構文エラー、予期しない「|」、「期待します} ' 。それぞれのdo {| x | x [1 .. -1] < < x。[0] < <「AY」}

私はそれが.each方法の問題だが、知っているドキュメントを読むと周りグーグルの後、私はそれが悪いのかを把握することはできません。

+0

「私はそれが '.each'方法の問題点を知っています" - いいえ、ちがいます。これは構文エラーです。つまり、コードは構文上有効なRubyでさえありません。言い換えれば、Rubyはコードを理解することができないため、コードを実行することさえできないため、呼び出すメソッドは完全に完全に無関係です。実際には、エラーメッセージやコードを見ていなくても構文エラーであるという事実から*確かに*言うことができることは、*どんな*メソッドとも関係がない可能性があるということです。 '.each'かそうでなければ。 –

答えて

1
def translate_pig_latin(text) 
    move_letters = text.split(' ') 
     .each { |x| return x[1..-1] << x[0] << 'ay' } 
    move_letters.join(' ')  
end 

いくつかの注意 -

  • 別のユーザーが述べたように、アレイからアイテムを取得するために、ブラケット表記を使用した場合、また、do/end{}
  • をミックスし、一致していない、ドン.と同じように使用してくださいx.[0]
  • .eachブロックは正しいことをしています(上記の注釈を遵守している場合)結果を(私は混乱して)回す。あなたが明示的にreturnを追加する場合、これはあなたが何が起こっているか理解するのに役立つならば、あなたのコードは

より引き出す方法上記のように動作し、より良い

def translate_pig_latin(text) 
     # create array to contain piglatinified phrase 
     new_phrase = [] 
     # each word of the original phrase do 
     text.split(' ').each do |x| 
      # grab the characters after the first character 
      new_word = x[1..-1] 
      # add the first character plus 'ay' to the end of the string 
      new_word << x[0] + 'ay' 
      # add the newly piglatinified string to the phrase 
      new_phrase << new_word 
     end 
     # turn the phrase into a space separated string 
     new_phrase.join(' ') 
    end 
+0

砦に非常に徹底的な説明をしてくれて、初心者のエラーにとても忍耐強くお付き合いしています:) – cerealCode

1

使用do ... endまたは{のいずれか... }。あなたがしたようにそれらをdo {と混用しないでください。その行は次のようになります。スタイルの観点から

.each { |x| x[1..-1] << x[0] << 'ay' } 

または

.each do |x| x[1..-1] << x[0] << 'ay' end 

、最もRubyistsは、シングルラインブロックと予備doため{ ... }を使用することを好む... end用複数のコード行にまたがるブロック。

+0

はい、元のエラーは修正されますが、機能にはまだ問題があります。 – larz