Предположим, мы хотим, чтобы кто-то написал свой собственный псевдослучайный метод. Как программирование. И мы хотим, чтобы вызвать ошибку каждый раз, когда они пытаются решить для встроенных функций в контекстномОтключение тасования и выборки в классе Array
До сих пор, это то, что я сделал:
ERROR_STRING_FOR_RANDOM = "Usage of built-in random generators is not allowed"
methods_to_block = ["rand", "srand", "Random::rand", "Random::srand",
"Random::seed", "Random::new", "Kernel::rand", "Kernel::srand",
"Array::shuffle", "Array::shuffle!", "Array::sample"]
methods_to_block.each do |method|
eval
"""
def #{method}
raise ERROR_STRING_FOR_RANDOM
end
"""
end
Таким образом, он блокирует вкось, и они поднимают ошибка:
rand
srand
Random.new.rand(18)
но он не работает с псевдослучайными методами массива. Например,
[1,2,3].shuffle!
Работает. Почему это происходит и как его предотвратить?
:)) .............. ......... –