0

私がすることになっています:

  • 文字列の最初の文字を大文字にします。
  • the冠詞 ( 、aan)、接続詞 ( and)、および前置詞 ( )を除くすべての単語を大文字にしinます。
  • 大文字にしますi(のように"I am male.")。
  • 文字列の最初の単語を指定します (実際には、これが何を意味するのかわかりません。spec ファイルを実行して他の関数をテストしようとしています)。

これが私のコードです:

class Book
  def initialize(string)
    title(string)
  end
  def title(string)
    arts_conjs_preps = %w{ a an the and
                           but or nor for
                           yet so although
                           because since
                           unless despite
                           in to
                           }
    array = string.downcase.split
    array.each do |word|
        if (word == array[0] || word == "i") then word = word.capitalize
        if arts_conjs_preps !include?(word) then word = word.capitalize
    end
    puts array.join(' ')
  end
end

puts Book.new("inferno")

ルビーは私がめちゃくちゃだと言っています:

puts Book.new("inferno") <--(right after the last line of code) 

このテスト コードでは、まったく同じエラー メッセージが表示されます。

def title(string)
    array = string.downcase.split
    array.each do |word|
        if word == array[0] then word = word.capitalize     
    end
  array.join(' ')
end

puts title("dante's inferno")

この特定の構文エラーに関して、ends または s または.s の末尾または欠落が問題の原因であることを示唆していない唯一の他のスタック オーバーフロー スレッドは、こちらです。最後のコメントは、gemset を削除して再作成することを推奨していますが、これは恐ろしく聞こえます。そして、どうすればいいのかわからない。

何かご意見は?簡単な解決策?役立つリソースはありますか?

解決

class Book
    def initialize(string)
        title(string)
    end

    def title(string)
    arts_conjs_preps = %w{ a an the and
                       but or nor for
                       yet so although
                       because since
                       unless despite
                       of in to
                               }
    array = string.downcase.split
    title = array.map do |word|
          if (word == array[0] || word == "i") || !arts_conjs_preps.include?(word)  
            word = word.capitalize 
          else
            word
          end
        end
      puts title.join(' ')
    end
end

Book.new("dante's the inferno")
4

3 に答える 3

2

として書く

class Book
  def initialize(string)
    title(string)
  end

  def title(string)
    arts_conjs_preps = %w{ a an the and
                           but or nor for
                           yet so although
                           because since
                           unless despite
                           in to
                           }
    array = string.downcase.split
    array.each do |word|
        word = word.capitalize if (word == array[0] || word == "i")
        word = word.capitalize if !arts_conjs_preps.include?(word)  
    end
    puts array.join(' ')
  end
end

puts Book.new("inferno")
# >> inferno
# >> #<Book:0x9704b7c>

私が見ることができる2つのエラーがあります:

  • if最後にhasendキーワードはありません。
  • if arts_conjs_preps !include?(word)は正しい構文ではありません。

最後のコメントに従って、コードの一部を変更します。

    array = string.downcase.split
    array.map! do |word,ar|
        bol = !arts_conjs_preps.include?(word) || word == array[0] || word == "i"
        bol ? word.capitalize : word
    end
    puts array.join(' ')
  end
end

puts Book.new("inferno")
# >> Inferno
# >> #<Book:0x9e50bd8>
于 2013-10-24T09:08:57.707 に答える
1

すべてifの には、一致する が必要endです。あなたのものはありません。

if (word == array[0] || word == "i") || !arts_conjs_preps.include?(word)
  word = word.capitalize
end

別の方法として、修飾記法を使用することもできます (おそらくそれが目的だったからです)。

word = word.capitalize if (word == array[0] || word == "i")
word = word.capitalize if !arts_conjs_preps.include?(word)

また

word.capitalize! if (word == array[0] || word == "i")
word.capitalize! unless arts_conjs_preps.include?(word)

その上、そのうちの 1 つに無効な構文がありました。

if arts_conjs_preps !include?(word)

これは、私が知っている有効な構文ではありません。(Ruby標準ライブラリを使用して、要素が配列に属しているかどうかを確認するつもりだった場合。それ以外の場合は完全に有効なrubyコードです)。

作業コードで更新

このように動作します

array = array.map do |word|
    if (word == array[0] || word == "i") || !arts_conjs_preps.include?(word) 
      word.capitalize
    else
      word
    end
end
于 2013-10-24T09:07:31.293 に答える
0

ifを書いたところに終わりがありません

于 2013-10-24T09:07:51.930 に答える