初学者Ruby - 关于对象

时间:2014-12-01 00:47:53

标签: ruby

Ruby上的初学者......下面是两个相似的代码,我理解这个基本代码的程序,但我想了解它背后的理论......

第一

 def stats(ppg)
   if ppg > 20
     puts "The PG is considered elite"
   else
     puts "The PG is not considered elite"
   end
 end

 stats(28)

第二

 def stats(ppg)
   if ppg > 20
     "The PG is considered elite"
   else
     "The PG is not considered elite"
   end
 end

 puts stats(28)

所以第一部分自动写出字符串,而第二部分没有 - 是第一部分的统计数据(ppg)被认为是一个对象或一个变量作为参数的方法?

1 个答案:

答案 0 :(得分:4)

在这两种情况下,

def stats(ppg)都是一样的,即名为stats的方法的方法定义的开始,该方法在方法中采用一个名为ppg的参数或参数体。

在这两种情况下,

stats(28)都是一样的,即调用名为stats的方法,并将文字Fixnum 28作为参数传递,然后将其分配给变量定义中方法体内的ppg

在Ruby中,每个表达都涉及两个不同的现象:副作用和返回值。表达式a = 1具有将1的值分配给变量a以及返回值1的副作用。并非Ruby中的每个方法都有副作用,但每个方法都有一个返回值 - 显式返回值(使用return),或者在方法体中计算的最后一个表达式的返回值。 / p>

puts在Ruby中是一个不幸的方法,因为它在很多初学者例子中使用,但它的行为令人困惑。它具有将其参数打印到stdout的副作用,但其返回值为nil(这通常会使初学者感到困惑,他们希望它返回其参数的值)。

第一种方法和第二种方法的区别在于第一种方法,因为它在内部使用puts,会产生将字符串打印到stdout并返回值为nil的副作用,而第二种方法没有副作用,但是字符串本身的返回值。

因此,当您在前面调用没有puts的第一个方法时,会出现打印字符串的副作用,并且您会看到输出。当您调用第二种方法时,没有打印副作用,因此为了将字符串打印到stdout,您必须调用putsputs的参数是stats方法的返回值,即您要打印的字符串。