Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Видемость типов в классе


Автор: segods 25.2.2008, 03:55
Сабж.
Есть класс, внем обьявлен хеш @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 !!!"

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

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

в метод initialize .

Автор: segods 25.2.2008, 22:30
Да, проблема решилась)) Всем спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)