[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