为什么我从这段代码中得到两行输出?

时间:2016-11-16 16:36:22

标签: ruby

为什么以下ruby程序打印输出两次?

a = Proc.new do
  class A
    def initialize d
      @c = d
    end

    def print
      p @c
    end
  end

  b = A.new(2)
  p b.print
end

a.call

实际输出

2
2

预期输出

2

4 个答案:

答案 0 :(得分:2)

  

为什么以下ruby程序打印输出两次?

这是第一次印刷

p @c

此结果将成为方法print的返回值,然后将依次打印

p b.print

方法p返回打印的值。这就是你如何得到两条具有相同输出的线。

答案 1 :(得分:1)

a = Proc.new do
  class A
    def initialize d
      @c = d
    end

    def print
     p @c
    end
  end

  b = A.new(2)
  b.print #you need just to call method print
end

a.call

答案 2 :(得分:0)

在ruby中,p打印其参数并返回它,因此b.print打印并返回2;然后p b.print再次打印2。

答案 3 :(得分:0)

命令" p"在Ruby上意味着你想要" print"一些东西......你的代码做了" p"命令两次。只需删除不需要的内容即可。

void func(int (*a)[4]) { //passing a 2D array
   a[1][2] = 100; //modified an element here of 2D array
   delete a;  //Would have an effect on the outside. Would delete a[0][0]'s memory outside.
}