2017-11-19 2 views
-3

次のコードを実行すると、X、Yキーと方向キーのセットが取得され、すべてユーザー入力に基づいて値が割り当てられます。これが行われた後、どのように私はハッシュマップの値を変更できるユーザーを求めることができますか?ユーザーがx => 1を入力すると仮定します。 y => 2; D => N - xキーを5に変更したいが、他のキーは変更しないでください。ユーザー入力からハッシュマップ値を編集するにはどうすればよいですか?

コードas suggested by jvillian

def rover_position(position) 
    { 
    x: "x position", 
    y: "y position", 
    D: "Direction (N,E,S,W)" 
    }.each_with_object({}) do |(key, message), position| 
    puts "Please input the rovers #{message}" 
    $position[key] = gets.chomp 
    end 
end 
+2

xに1を入力した場合、どのように5になりますか?あなたのコードで何が問題なのか分かりませんが、出発点は '$ position'の' $ 'を取り除くことです。bashと違って、変数を使うときには' $ 'の前にはありません。 '$ position'と言うとき、実際には決して設定されていないグローバルを指しています。未定義グローバルへの参照が 'nil'に等しいという事実でないなら、NoMethodErrorを得るでしょう。 –

+2

私は以前の質問に提供したコードを使用しているのを見ています。しかし、あなたは決してその答えを受け入れませんでした。 – jvillian

答えて

1

通常のRubyの変数は、接頭辞を持っていない、とプレフィックスが重要な意味を持っているは:@x$xxは、3つの全く異なるものを表しています。

ちょうどこの操作を行います。

position[key] = gets.chomp 

するか、あなたのコードを手直し:

あなたのプロンプトは次の1つの実行から変更されませんので、一定の作成、プラス with_object Fussingのを回避
PROMPTS = { 
    x: "x position", 
    y: "y position", 
    D: "Direction (N,E,S,W)" 
} 

def rover_position(position) 
    puts "Please input the rovers #{message}" 

    PROMPTS.map do |key, message| 
    [ key, gets.chomp ] 
    end.to_h 
end 

関連する問題