[Ruby] Re: [Ruby] Не работает определение нового метода для Time в CGI
Eugene Scripnik
Eugene.Scripnik at itgrp.net
Tue Nov 5 12:07:10 MSK 2002
Tuesday, November 5, 2002, 10:49:37 AM, you wrote:
IP> Приветстствую!
IP> Имеем:
IP> #----------------------------------------------
IP> require 'cgi'
IP> class Time
IP> def testmeth
IP> return 1
IP> end
IP> end
IP> tm = Time.local(2002, 10, 21, 0, 0, 0)
IP> cgi = CGI.new("html3")
IP> cgi.out{cgi.html{cgi.body{}}}
IP> #----------------------------------------------
IP> При попытке выполнения как CGI получаем ошибку:
IP> undefined method `local' for #<Module 0lx3190d23c>::Time (NameError)
IP> Из командной строки все работает. Если убрать упоминание про class Time,
IP> тоже работает. В то же время, если определить новый метод для
IP> какого-либо другого встроенного класса вроде String, ошибки не
IP> возникает. Данную проблему можно обойти, создав InhTime<Time и дав ему
IP> все необходимые методы. Есть ли какая-либо законная причина для Time не
IP> любить custom методы в CGI, или это баг mod_ruby?
Тут дело не в неприязни :)
Дело в том, что во время работы скрипта под mod_ruby, он исполняется в
анонимном модуле, это видно из текста ошибки. Так вот когда ты
определяешь класс Time, в действительности ты не добавляешь новый
метод в встроенный класс, а определяешь совершенно новый класс Time,
который имеет все методы класса Object + метод testmeth ну и находится
в анонимном модуле. Ну и при вызове Time.local используется именно
определенный тобой выше класс Time, который в действительности не
содержит метода local. Если ты хочешь использовать встроенный класс
Time, то пользуйся приблизительно таким вызовом:
::Time.local(...)
IP> Спасибо.
--
Best regards,
Eugene [team Enticla] [IT Group] mailto:Eugene.Scripnik at itgrp.net
More information about the Ruby
mailing list