2015-12-29 2 views
-6

Я узнаю о модулях в Ruby.Ошибка синтаксиса в Ruby. неожиданный keyword_end, ожидающий концевых входов

Модуль код был хорошо, но когда я разделить его и сделал файл он возвратил ошибку синтаксиса:

C:/Desktop/Ruby/Function/5.rb:1:in `require_relative': C:/Desktop/Ruby/Function/Auth.rb:13: syntax error, unexpected keyword_end, expecting end-of-input (SyntaxError) 
    from C:/Desktop/Ruby/Function/5.rb:1:in `<main>' 

Это Auth.rb:

module Auth 
    module_function() 

    def login(id) 
    members = ['abc', 'def', 'ghi'] 

    for member in members do 
     if (id == member) 
     return true 
     end 
    end 
    return false 
    end 
end 

Это 5. гь:

require_relative 'Auth' 

puts "Input your ID" 

input_id = gets.chomp() 

if Auth.login(input_id) 
    puts "Hello, " + input_id 
else 
    puts "Who are you?" 
end 
+1

Что ваш вопрос? – sawa

+0

Я получил пример с сайта и отдельно попытаюсь сделать файл модуля и протестировать модуль. – Dragon

+0

Я не точно module_function(), но человек, который сделал этот пример, сказал, что эта функция выполняет инициализацию переменных модуля. Без этой функции произошла ошибка, например, как функция undefined login() « – Dragon

ответ

0

Вы не можете определить модуль с помощью module Auth():

irb(main):001:0> module Auth() 
irb(main):002:1> end 
SyntaxError: (irb):1: syntax error, unexpected '\n', expecting :: or '[' or '.' 

и

irb(main):001:0> module Auth() 
irb(main):002:1> def login(id) 
irb(main):003:2> end 
irb(main):004:1> end 
SyntaxError: (irb):1: syntax error, unexpected '\n', expecting :: or '[' or '.' 
(irb):4: syntax error, unexpected keyword_end, expecting end-of-input 

Удаление замыкающую скобку исправляет ошибку:

irb(main):001:0> module Auth 
irb(main):002:1> def login(id) 
irb(main):003:2> end 
irb(main):004:1> end 
=> :login 

и

irb(main):001:0> module Auth 
irb(main):002:1> module_function() 
irb(main):003:1> 
irb(main):004:1* def login(id) 
irb(main):005:2>  members = ['abc', 'def', 'ghi'] 
irb(main):006:2> 
irb(main):007:2*  for member in members do 
irb(main):008:3*  if (id == member) 
irb(main):009:4>   return true 
irb(main):010:4>  end 
irb(main):011:3>  end 
irb(main):012:2>  return false 
irb(main):013:2> end 
irb(main):014:1> end 
=> :login 

Ваш Код может быть более рубин, как:

def login(id) 
    ['abc', 'def', 'ghi'].each do |member| 
    return true if (id == member) 
    end 
    return false 
end 
login('ghi') # => true 
login('foo') # => false 

, который может быть переработан в:

def login(id) 
    ['abc', 'def', 'ghi'].any? { |member| (id == member) } 
end 
login('ghi') # => true 
login('foo') # => false 

затем:

def login(id) 
    ['abc', 'def', 'ghi'].include?(id) 
end 
login('ghi') # => true 
login('foo') # => false 
+0

Благодарим вас за объяснение. Я поставил неправильную скобку. Я должен удалить это. Позвольте мне удалить и повторить попытку. Спасибо за помощь. – Dragon