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)被认为是一个对象或一个变量作为参数的方法?
答案 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,您必须调用puts
。 puts
的参数是stats
方法的返回值,即您要打印的字符串。