Почему Ruby не выдает ошибку в случае, когда имя класса и имя файла класса не совпадают? - PullRequest
1 голос
/ 04 июня 2019

Почему интерпретатор Ruby не выдает здесь NameError в этом случае?

class OrangeTurtle
   self.table_name = 'turtles'
end

Имя файла: orange_turtles.rb

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Ошибка имени или неинициализированная постоянная ошибка появляется только в Rails.Причина этого заключается в том, что активная запись (которая также является общим шаблоном проектирования) отображает таблицы в базе данных с моделями (или с объектами в целом).Active Record может установить это соединение только с помощью соглашений об именах файлов и классов.Как упоминалось в другом ответе, чистый рубин не должен соответствовать этим соглашениям.Тем не менее, общим правилом является присвоение имен файлам, таким как классы, которые они содержат, для лучшего упорядоченного кода.

0 голосов
/ 04 июня 2019

Этот ответ может звучать как полицейский, но он не выдает ошибку, потому что Ruby не заботится даже о том, как называются ваши имена файлов.

например, в файле asdfasdf.no_rb_ending_here мы можем иметь

#!/usr/bin/env ruby
module Something
  class Test
    def test
      puts 'test'
    end
  end
end
class SomethingElse
  def otherThings
    puts 'haha'
  end
end

Затем, чтобы сделать вещи еще более странными, у меня может быть отдельный файл, который модифицирует (исправляет обезьяны) классы, определенные в этом файле.в more_stuff.rb

#!/usr/bin/env ruby
require_relative 'asdfasdf.no_rb_ending_here'
module Something
  class Test
    def test2
      test()
      puts '2'
    end
  end
end
class SomethingElse
  def moreThings
    otherThings()
    puts 'MOAR'
  end
end

Something::Test.new.test2()
# test
# 2
SomethingElse.new.moreThings()
# haha
# MOAR

Ruby довольно крутой - вы не получаете ошибок за то, что НЕ НУЖНО вызывать ошибку.

...