-1
class Test
def self.take_test(question, options, answer)
puts question
options.each_with_index { |option, idx| puts "#{ idx + 1 }: #{ option}" }
print "Answer: "
reply = gets.to_i
if answer == reply
puts "Correct!"
else
puts "Wrong. The answer is: " + answer.to_s
end
end
end
file = File.open("Matematik.txt", "r")
? '2 + 2 무엇입니까', [ '2' '3', '4', '5', 4
'3 + 3 무엇인가?'[ '3', '6', '9', 6
I 얻을 오류 : take_test 잘못된 인수 수 (주어진 1, 예상 3) (ArgumentError)
1 개의 인수와 같은 행을 읽는 것처럼 보입니다. 이 eval("Test.take_test(#{line})")
으로, 그래, 이론적으로
#Test.take_test('What is 2+2?', [ '2', '3', '4', '5', ], 4)
고마워요! eval을 사용하는 것이 잘못된 이유는 무엇입니까? 지금까지 내 문제가 해결되었습니다. –
'eval'은 임의 코드의 실행을 허용하기 때문에 데이터가 어디서 오는 것인지 정확히 알지 못한다면 보안 문제가 가장 중요합니다. 예를 들어 누군가이 프로그램을 다음과 같이 프로그램에 넣었다고 상상해보십시오 :''['cat/etc/passwd', [ "Haha", "What", "acker!"], 0]''; 질문을 표시 할 시간이되면 사용자에게 암호 파일이 표시됩니다. 데이터가 어디서 오는지 알더라도,'eval'은 Ruby의 메서드 캐시를 없애 코드를 느리게 만듭니다. 그러나 1 차적으로 안전 : "eval"을 결코 사용하지 않는 사람을 훈련 시키면 실수로 그것을 사용하는 유혹을받을 수 없습니다. – Amadan
분명히, "eval'은 악"은 간결한 과다 단순화이지만, [여기] (https://softwareengineering.stackexchange.com/questions/311507/why-are-eval-like-features-considered-evil-in)을 읽으십시오. - 대비 - 다른 - 가능성 - harmfu) 잘 논의를 위해. tl; dr :'eval'은 절대로 첫 번째 선택이 아니어야합니다. 신중하게 검토 한 후에 사용해야합니다. – Amadan