質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

syntax error????

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 771

11 def test_to_ints
12  assert_equal[0,0,0],to_ints('#000000')
13   assert_equal[255,255,255],to_ints('#ffffff')
14   assert_equal[4,60,120],to_ints('#043c78')
15 end


def to_ints(hex)
r = hex[1..2]
g = hex[3..4]
b = hex[5..6]
ints = []
[r,g,b].each do |s|
ints << s.hex
end
ints


test/rgb_test.rb:12: syntax error, unexpected '\n', expecting &. or :: or '[' or '.'
test/rgb_test.rb:13: syntax error, unexpected '\n', expecting &. or :: or '[' or '.'
test/rgb_test.rb:14: syntax error, unexpected '\n', expecting &. or :: or '[' or '.'

エラー内容の'\n'の意味がわかりません。説明できるかたお願いします。後この文を書き直すといいよとかのアドバイスもくれたら嬉しいです。

プロを目指すためのRuby入門 p110 参照

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2019/03/22 15:42

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

0

assert_equal[0,0,0],to_ints('#000000')のように書くと、assert_equal()の結果に対して[0,0,0][]演算子を呼び出す、と解釈されてしまい、うまくいきません。

カッコを明示してassert_equal([0,0,0],to_ints('#000000'))としてみたら、どうなりますでしょうか。


ここに限らず、Rubyは「カッコを省略して書ける」ことの代償として「文法的な切れ目がわかりにくい」ことがあります。たとえば、a - 3a -3は違う意味になります。困ったときはカッコ区切りで文法的な境界を明示しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/22 15:45

    Run options: --seed 8364

    # Running:

    E

    Error:
    RgbTest#test_to_hex:
    NameError: undefined local variable or method `ints' for #<RgbTest:0x00007feaab8de260>
    /Users/kawakamiyamato/Desktop/ruby-book/lib/rgb.rb:16:in `to_hex'
    test/rgb_test.rb:6:in `test_to_hex'


    bin/rails test test/rgb_test.rb:5

    F

    Failure:
    RgbTest#test_to_ints [test/rgb_test.rb:12]:
    Expected: [0, 0, 0]
    Actual: ["00", "00", "00"]


    bin/rails test test/rgb_test.rb:11



    Finished in 0.002357s, 848.5363 runs/s, 424.2681 assertions/s.
    2 runs, 1 assertions, 1 failures, 1 errors, 0 skips

    rob_test.rbのend抜けを解消し、
    def to_ints(hex)
    r = hex[1..2]
    g = hex[3..4]
    b = hex[5..6]
    ints = []
    [r,g,b].each do |s|
    ints << s.hex
    end
    end←追加
    ints
    end
    にコードを書き換えたらこうなりました

    キャンセル

  • 2019/03/22 15:48

    テストが動いたということは、もとの文法問題は解決しましたね。

    あとは、テストが回るようになったところで意図したように実装するだけです。

    キャンセル

  • 2019/03/22 15:57

    Run options: --seed 19260

    # Running:



    Finished in 0.000768s, 0.0000 runs/s, 0.0000 assertions/s.
    0 runs, 0 assertions, 0 failures, 0 errors, 0 skips

    これって成功しているのでしょうか?
    ちなみに、一番上のdef test_to_intsをto_intsに変更しました。真ん中の定義してあるメソッドと同じにしました。後エラーの指示どうりassert_equal(['0','0','0'],to_ints('#000000'))この部分を''で囲いました。

    キャンセル

0

to_inits.rb

def to_ints(hex_str)
  r = hex_str[1..2]
  g = hex_str[3..4]
  b = hex_str[5..6]
  [r, g, b].map(&:hex)
end

to_ints_spec.rb

require "test/unit/assertions"
require "./to_ints.rb"

include Test::Unit::Assertions
describe 'Sample' do
  example 'test_to_ints' do
    assert_equal [0, 0, 0], to_ints('#000000')
    assert_equal [255, 255, 255], to_ints('#ffffff')
    assert_equal [4, 60, 120], to_ints('#043c78')
  end
end

実行例
イメージ説明

1つのテストが実行され、失敗が 0 だったことが表示されています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る