2013-09-25 3 views
-3

Я начинаю программировать, я немного изменил свой код, чтобы выполнить некоторую def из командной строки. После этого изменения я получил сообщение об ошибке, но первый мой код:Код не работает после небольшого изменения

require 'faraday' 

@conn = Faraday.new 'https://zombost.de:8673/rest', :ssl => {:verify => false} 
@uid = '8978' 

def certificate 
    res = conn.get do |request| 
    request.url "acc/#{@uid}/cere" 
    end 
end 

def suchen(input) 
    @suche = input 
    @res = @conn.get do |request| 
    request.url "acc/?search=#{@suche}" 
    end 
end 

puts @res.body 

Тогда я написал в консоли:

ruby prog.rb suchen(jumbo) 

Итак, как-то я получаю сообщение об ошибке:

Undefined method body for Nilclass 
+1

Почему вы downvote это? Im beginner –

+0

Помимо прочего, ваш синтаксис оболочки недействителен. –

+0

Невозможно вызвать def suchen с консоли? –

ответ

3

Вы 'не ссылаясь ни на один из ваших методов, поэтому @res никогда не назначается.

@res оценивается в nil, поэтому вы вызываете nil.body.


RE: Ваше обновление:

ruby prog.rb suchen(jumbo)

Это не то, как вы вызываете метод. Вы должны называть его от в исходном файле. Все, что вы делаете, это передать аргумент вашему сценарию, который будет простой строкой, доступной в массиве ARGV.


RE: Ваш комментарий:

Это должно пойти, не говоря о том, что решение является на самом деле вызывать ваш метод.

+0

Итак, какое решение? H –

+0

Можно ли вызвать метод с консоли –

0

Вы можете вызвать методы из командной строки. Ruby имеет функцию eval, которая оценивает строку. Вы можете вычислять строки аргументов командной строки.

Вот как это сделать. Изменение линии puts @res.body к

str = ARGV[1] 
eval(ARGV[0]) 
puts @res.body 

затем запустить программу, как так

$ ruby prog.rb suchen\(str\) jumbo 
Смежные вопросы