方法调用之前是否创建了所有对象?

时间:2015-09-05 14:26:41

标签: ruby

以下是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

似乎鞋子和脚都是在任何方法被调用之前创建的。这是如何运作的?

1 个答案:

答案 0 :(得分:2)

在ruby中,class关键字打开一个类并在该类的范围内执行ruby代码。

class Object
  puts 'Hello'
end
puts 'World'

打印

Hello
World

如果不存在,创建一个类只是一个副作用。

顺便说一下,def语法只是一个定义方法并返回其名称的表达式。