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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1216閲覧

syntax error????

Yamato_kawakami

総合スコア20

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/03/22 05:57

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 参照

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

to_inits.rb

ruby

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

to_ints_spec.rb

ruby

1require "test/unit/assertions" 2require "./to_ints.rb" 3 4include Test::Unit::Assertions 5describe 'Sample' do 6 example 'test_to_ints' do 7 assert_equal [0, 0, 0], to_ints('#000000') 8 assert_equal [255, 255, 255], to_ints('#ffffff') 9 assert_equal [4, 60, 120], to_ints('#043c78') 10 end 11end

実行例
イメージ説明

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

投稿2019/03/24 01:23

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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 06:09

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamato_kawakami

2019/03/22 06:15

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': /Users/kawakamiyamato/Desktop/ruby-book/lib/rgb.rb:15: syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError) from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from test/rgb_test.rb:2:in `<main>' ダメでした。構文以外の問題とかは考えられるのでしょうか?
maisumakun

2019/03/22 06:18

下の「def to_ints」に対応するendがないようです。
Yamato_kawakami

2019/03/22 06:30

test/rgb_test.rb:17: syntax error, unexpected keyword_end, expecting end-of-input endを追加したらこうなりました。
Yamato_kawakami

2019/03/22 06:33

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 end ←ここですか?
maisumakun

2019/03/22 06:38

「rgb_test.rb:17」ということは、テストコードの方でもend抜けが起きているようです(上に書かれたコードに途中しかないので、それ以上のことはわかりません)
Yamato_kawakami

2019/03/22 06: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 にコードを書き換えたらこうなりました
maisumakun

2019/03/22 06:48

テストが動いたということは、もとの文法問題は解決しましたね。 あとは、テストが回るようになったところで意図したように実装するだけです。
Yamato_kawakami

2019/03/22 06: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'))この部分を''で囲いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問