ошибки ruby ​​mixins - PullRequest
       10

ошибки ruby ​​mixins

3 голосов
/ 09 мая 2011

Я запутался со следующим фрагментом кода.

В библиотеке HTTParty есть метод класса с именем def self.get(..).

Я включаю его в модуль Client, а затем включаю этот модуль Client в мой класс Line и получаю доступ к методу get в моем методе def self.hi().Но когда я запускаю, выдает ошибку:

ruby geek-module.rb
geek-module.rb:12:in `hi': undefined method `get' for Line:Class (NoMethodError)
  from geek-module.rb:16:in `<main>'

Почему я не могу получить доступ к этому get методу HTTParty?Ниже приведен код:

require 'rubygems'
require 'httparty'

module Client
  include HTTParty
end

class Line
  include Client

  def self.hi
    get("http://gogle.com")
  end
end

puts Line.hi

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

Вы не можете получить доступ к методу self.get, потому что используете include HTTParty, метод include делает доступными методы экземплярами класса, а не самим классом, ваш метод hi является методом класса, но метод get является методом экземпляра. Если вы используете что-то вроде:

class Line
 include Client

 def hi
   get("http://gogle.com")
 end 
end

line = Line.new
line.get

Я думаю, что это должно работать

... или просто используйте extend Client вместо include

0 голосов
/ 09 мая 2011

Итак, когда вы include HTTParty в модуле Client, вы можете получить доступ к методу get через Client.get.И когда вы включаете Client в класс Line, вы можете получить доступ к методу get через Client.get.На самом деле, если вы хотите использовать метод get в своем классе Line, вам не нужно его включать.Итак:

require 'rubygems'
require 'httparty'

module Client
  include HTTParty
end

class Line

  def self.hi
    Client.get("http://google.com")
  end
end

puts Line.hi

или если вам нужен метод get в вашем классе Line, вы можете использовать что-то подобное:

class Client
  include HTTParty
end

class Line < Client
  def self.hi
    get("http://google.com")
  end
end

puts Line.hi
...