メソッドをオブジェクト化して利用したい
Rubyを勉強中の者です。よくわからなくなってきました。「メソッドをオブジェクト化して引数にできる」ということを知って、実験していました。しかし、どうにもうまく実行できていません。原因がよくわかりません。
メソッドの定義①file名:my_global_methods.rb
1.メソッド
入力された値に対して、その値が不適切であれば、もう一度入力を促すメソッド
2.変数
object ➡ 入力対象
condition ➡ 条件(引数1つのメソッド)
input_value ➡ 入力値
ruby
1def input_repeat(object,condition) 2 puts object + "を入力してください:" 3 input_value = gets.chomp.to_i 4 until condition.call(input_value) do 5 puts "入力が適切ではないです。もう一度。" 6 puts object + "を入力してください:" 7 input_value = gets.chomp.to_i 8 end 9 return input_value 10end
メソッドの定義②file名:my_math_methods.rb
メソッド
最小の逆元を返すメソッド
<逆元の説明>
例
「法」と呼ばれる数字を7とします。
23を法で割った余りは2になります。
「23になにを掛けたら、法で割って余り1になるか」←この問の答えを「(7を法とする)23の逆元」という。
(答え 最小の逆元は、4です)
変数
mod ➡ 法
number ➡ 逆元を求めたい値
ruby
1def mod_inverse(mod,number) 2 3 if mod <= 1 then 4 return 0 5 else 6 a = number % mod 7 for index in 1..mod do 8 if a*index % mod == 1 then 9 return index 10 end 11 end 12 end 13 14 return "none" 15 16end
メソッドの定義③file名:my_math_methods.rb
整数か否かを判定
変数
input_value ➡ 入力値
ruby
1def integer_number(input_value) 2 if input_value%1==0 then 3 return true 4 else 5 return false 6 end 7end
メソッドの定義④file名:my_math_methods.rb
自然数か否かを判定
変数
input_value ➡ 入力値
ruby
1def natural_number(input_value) 2 if integer_number(input_value)==true && input_value>=1 then 3 return true 4 else 5 return false 6 end 7end
ソースコード
ruby
1require "./my_global_methods" 2require './my_math_methods' 3 4sentense1 = "法(自然数)" 5condition1 = method(:natural_number) 6sentense2 = "逆数を求めたい数(整数)" 7condition2 = method(:integer_number) 8 9mod = input_repeat(sentense1,condition1) 10number = input_repeat(sentense2,condition2) 11 12if mod_inverse(mod,number) == 0 13 puts "法は自然数で入力してください" 14elsif mod_inverse(mod,number) == "none" 15 puts "逆元はありませんでした" 16else 17 puts "逆元は#{mod_inverse(mod,number)}でした。" 18end 19 20b = gets
条件に沿った入力値であれば、ちゃんと答えを返してくれます。
しかし、条件に沿わない入力をしたときに、繰り返し入力を促してくれません。
ご教授お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/10 08:17