为什么在此实例中Ruby解释器不抛出NameError?
class OrangeTurtle
self.table_name = 'turtles'
end
文件名:orange_turtles.rb
答案 0 :(得分:0)
这个答案听起来像个警察,但不会引发错误,因为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非常酷-不需要引起错误的内容不会出错。
答案 1 :(得分:0)
名称错误或未初始化的常量错误仅出现在Rails中。这样做的原因是,活动记录(这也是一种通用设计模式)正在将数据库中的表与模型(或通常与对象)进行映射。 Active Record只能通过文件和类的命名约定建立该连接。 如另一个答案中所述,纯红宝石不需要遵守这些约定。但是,通常将文件命名为文件所包含的类,以具有更好的组织代码。