我遇到过这样的事情:
class OBRTestBase < Test::Unit::TestCase
# some stuff here ...
setup
def obr_setup
# more stuff here ...
end
# more stuff here ...
写的setup
行是什么?您是否可以在类中编写任何单词,方法应该在哪里,而不是def
或@
?它完成了什么?
我还找到了teardown
这个词。可以写任何东西吗?是否有保留字列表?
答案 0 :(得分:2)
想象一下这段代码
def setup
puts "managing external connections"
puts "doing setup work and throwing needed exceptions"
puts "we have successfully found the mothership"
end
def verify
puts "class A has successfully been defined"
end
class A
setup
def initialize
puts "initializing a new a"
end
def foo
puts "foo"
end
verify
end
puts "-----start of program-----"
a = A.new()
a.foo
我们需要在启动应用程序时连接到外部资源。我们希望在没有这些资源时事先得到通知。
运行这段代码将具有以下输出
managing external connections
doing setup work and throwing needed exceptions
we have successfully found the mothership
class A has successfully been defined
-----start of program-----
initializing a new a
foo
=> nil
除此之外,它还用于在类中定义公共和私有方法时启动新范围。
Class A
public
public_foo(x)
...
end
private
private_bar(x)
...
end
end
请注意,public_foo方法是在类定义上公开定义的。而不是在课堂设置的时候。
答案 1 :(得分:0)
在Ruby代码中,您编写方法,它们将按照读取的顺序执行。如果您编写setup
(假设它是一种方法,因为如果它是局部变量则无用),在类OBRTestBase
中,它将在OBRTestBase
的上下文中执行。如果没有这样的方法或局部变量,那么它将引发错误。
答案 2 :(得分:0)
setup
是一个在加载类时可用的方法。它可能通过多种方法注入当前环境。
要查找项目中定义此方法的位置,您可以打印该方法的源位置:
p method(:setup).source_location