Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видемость типов в классе, теряет тип 
:(
    Опции темы
segods
  Дата 25.2.2008, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Сабж.
Есть класс, внем обьявлен хеш @links=Hash.new("qwe"=>"asd")
Позже в процедуре def geturl добавляется пара ключ-значение @links.[]=(2,2).
При выполнении ruby spider.rb вылетает ошибка:

spider.rb:23: warning: parenthesize argument(s) for future version
spider.rb:25:in `geturl': undefined method `[]=' for nil:NilClass (NoMethodError)
        from spider.rb:24:in `each'
        from spider.rb:24:in `geturl'
        from spider.rb:44

Если перед @links.[]=(2,2) поставить @links=Hash.new то программа выполняется без ошибок.
Обьясните в чем проблема? Может я с видемостью напутал, хотя в def geturl спокойно читаю глобальную @links ...
Версия Ruby: ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-linux]


Код

require "net/http"

class Spider
@links=Hash.new("qwe"=>"asd")
@ii=0
@host=""
@dir=""
@page=""
@data=""

def getpage(link)    
    mas=/http:\/\/([^\/]*)(.*)([^\/]*)/.match(link)
    @host=mas[1]
    @dir =mas[2]
    @page=mas[3]

    h = Net::HTTP.new @host,80
    resp,@data=h.get @dir+@page,nil
    #rescue=>err;puts "Error: #{err}  #{host+dir+page}";end
end

def geturl
    [email protected] Regexp.new /href=['"]?([^'">]*)['"]?/
    for link in new_link
        @links.[]=(2,2)
    end

#    [email protected]
#    for i in 0..n
#        unless @links[i].to_s =~ (Regexp.new "^http://")
#               @links[i] = "http://"+@host+@dir+@links[i].to_s
#        end
#    end
end

def getlinks
    return @links
end

end

spider = Spider.new
spider.getpage("http://yandex.ru/")
spider.geturl
puts spider.getlinks

puts "!!! END !!!"

PM MAIL   Вверх
setq
Дата 25.2.2008, 09:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кажется, class-level @xxx и instance-level @xxx значат не одно и то же. В любом случае, тебе необходимо перенести код
Код

@links=Hash.new("qwe"=>"asd")
@ii=0
@host=""
@dir=""
@page=""
@data=""

в метод initialize .
  Вверх
segods
  Дата 25.2.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Да, проблема решилась)) Всем спасибо)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.