以下是RubyMonk教程中的一些代码:
class Shoe
def initialize(toes = 1)
@toes = toes
end
puts "1 inside the class: #{defined?(@toes).inspect}"
def i_can_haz_toes
puts "2 inside the instance: #{defined?(@toes).inspect}"
end
end
class Foot
def initialize(toes = 5)
@toes = toes
end
puts "3 inside the class: #{defined?(@toes).inspect}"
def i_can_haz_toes
puts "4 inside the instance: #{defined?(@toes).inspect}"
end
end
samurai_boot = Shoe.new(2)
samurai_boot.i_can_haz_toes
left = Foot.new
left.i_can_haz_toes
puts "5 in the `main` class: #{defined?(@toes).inspect}"
这是输出:
1 inside the class: nil
3 inside the class: nil
2 inside the instance: "instance-variable"
4 inside the instance: "instance-variable"
5 in the `main` class: nil
我没有得到输出的顺序。在代码中,首先创建对象Shoe,然后在其上调用方法,并且仅在此之后创建对象Foot。对我来说,这应该打印
1 inside the class: nil
2 inside the instance: "instance-variable"
3 inside the class: nil
4 inside the instance: "instance-variable"
5 in the `main` class: nil
似乎鞋子和脚都是在任何方法被调用之前创建的。这是如何运作的?
答案 0 :(得分:2)
在ruby中,class
关键字打开一个类并在该类的范围内执行ruby代码。
class Object
puts 'Hello'
end
puts 'World'
打印
Hello
World
如果不存在,创建一个类只是一个副作用。
顺便说一下,def
语法只是一个定义方法并返回其名称的表达式。