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

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

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

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

Q&A

解決済

2回答

871閲覧

Rubyのハッシュ記法変換

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

1クリップ

投稿2021/07/08 06:44

編集2021/07/09 17:19

libディレクトリに

Ruby

1def convert_hash_syntax(old_syntax) 2 old_syntax.gsub(/:(\w+) *=> */, '\1: ') 3end

このコード(convert_hash_syntax.rb)を保存し、

testディレクトリに

Ruby

1require 'minitest/autorun' 2require '../lib/convert_hash_syntax' 3 4class ConvertHashSyntaxTest < Minitest::Test 5 def test_convert_hash_syntax 6 old_syntax = <<~TEXT 7 { 8 :name => 'Alice', 9 :age=>20, 10 :gender => :female 11 } 12 TEXT 13 expected = <<~TEXT 14 { 15 name: 'Alice', 16 age: 20, 17 gender: :famale 18 } 19 TEXT 20 assert_equal expected, convert_hash_syntax(old_syntax) 21 end 22end

このコードを保存しました。
そして、コマンドフロンプト上でtestディレクトリに保存してあるコードを実行したのですが、

Running:

F

Finished in 0.007623s, 131.1819 runs/s, 131.1819 assertions/s.

  1. Failure:

ConvertHashSyntaxTest#test_convert_hash_syntax [convert_hash_syntax_test.rb:20]:
Expected: "{\nname: 'Alice',\nage: 20,\ngender: :famale\n}\n"
Actual: " {\n name: 'Alice',\n age: 20,\n gender: :female\n}\n"

1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

というエラーが出てしまいました。
このエラーは何を言わんとしていますか?
また、このコードはどこが間違っていますか?

Ruby

これは、テキストのコードなのですが、テキストと比べてどこが違っていますか?
上の青丸がlibディレクトリ用のコードで、下の黒丸がtestディレクトリ用のコードです。

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

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

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

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

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

guest

回答2

0

このエラーは何を言わんとしていますか?

expectに指定した結果と、実際の結果が違う、ということです。

このコードはどこが間違っていますか?

エラーメッセージとコードを見ての通り、old_syntaxのインデントが正しくないために、余計なスペースが入ってしまっています。

投稿2021/07/08 06:54

maisumakun

総合スコア146018

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

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

退会済みユーザー

退会済みユーザー

2021/07/08 16:37

その余計なスペースを治すためにlibディレクトリにハッシュ記法を変換する正規表現を記したのですが、これはtestディレクトリに保存したファイルには反映されていませんか? それとも正規表現が間違っていますか?
maisumakun

2021/07/08 22:16

> その余計なスペースを治すために 残念ながら、コロンより前のスペースについては全く処理がなされていません。
退会済みユーザー

退会済みユーザー

2021/07/09 14:37

どうすれば処理されるようになりますか?
asm

2021/07/09 16:08

> その余計なスペースを治すために たぶんそのコードの出典元である「プロを目指す人のためのRuby入門」に沿っていた場合 期待する動作はそうではないと思いますが 本当にインデントも修正対象なのでしょうか?
退会済みユーザー

退会済みユーザー

2021/07/09 17:31

テキストのコード写真を質問文に添付しました。容量が大きくて元のサイズじゃ添付できなかったので、容量を小さくしたために画質が悪くなってしまい、申し訳ありません。
maisumakun

2021/07/09 22:04

> このコードはどこが間違っていますか? すでに書いたように、old_syntaxのインデントが違っています。
guest

0

ベストアンサー

ヒアドキュメント(ここでは<<~TEXTTEXT)はインデントセンシティブ・・・とはちょっと違う気もするが
ヒアドキュメントの中身のインデントについては注意する必要があります。
つまり

ruby

1 old_syntax = <<~TEXT 2 { 3 :name => 'Alice', 4 :age=>20, 5 :gender => :female 6 } 7 TEXT

ruby

1 old_syntax = <<~TEXT 2 { 3 :name => 'Alice', 4 :age=>20, 5 :gender => :female 6 } 7 TEXT

ではold_syntaxの中身が異なります。

同様に書籍での

ruby

1 old_syntax = <<~TEXT 2 { 3 :name => 'Alice', 4 :age=>20, 5 :gender => :female 6 } 7 TEXT

も、別です

投稿2021/07/10 01:08

asm

総合スコア15149

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

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

退会済みユーザー

退会済みユーザー

2021/07/10 06:08

回答ありがとうございます。 インデントを治したら、ちゃんと実行できました。 ただ、実行結果が書籍だと、2assertionsと書いてあるのに、自分が実行してみたら1 assertionsという結果になったのですが、この場合まだインデントが書籍のものとは間違っているのでしょうか? 回答に記されている書籍のコードコードをコピペしても、1assertionsという結果になってしまいます。
退会済みユーザー

退会済みユーザー

2021/07/10 06:34

確かにありました! その部分は見落としていました。 教えて下さりありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問