`to_s` 没有将整数转换为字符串
`to_s` isn't converting an integer to a string
我在方法中调用 to_s
:
$ def my_function(num)
$ number = num.to_s.split(//)
$ puts number
$ end
$ my_function(233)
2
3
3
# => nil
在我看来就像是在函数内部,因为输出是 nil
,所以没有创建数组。为什么在方法内部调用 to_s.split(//)
时没有创建字符串数组?
此外,为什么 puts number
的输出看起来只是每个数字单独一行?我是否需要在函数中显式创建数组,然后显式将拆分后的数字压入其中?
您的函数正在调用 puts number
。那将显示它,而不是 return 它。 puts
returns nil 这就是为什么您对 my_function(233)
的调用是 returning nil 的原因。每行输出一个数字的原因是 puts
在将数组传递给它时所做的。每行一个元素。
试试这个代码:
puts [1,2,3]
puts '=' * 40
def my_function(num)
num.to_s.split(//)
end
x = my_function(233)
p x
当运行输出为:
1
2
3
========================================
["2", "3", "3"]
主要区别在于 my_function
不再显示任何输出。它只是 return 的结果。重要的是要记住 ruby 方法将 return 最后计算的语句作为结果。也就是说上面的方法和这个是一样的:
def my_function(num)
return num.to_s.split(//)
end
您在第一个代码段中看到的数组是拆分函数的计算结果。在函数之外尝试此操作: puts [1,2,3]
,您会发现结果没有变化。
如果你想让它以可爱的方式打印出来,请使用print
。
此致
当您在数组上调用 puts
时,它会分别输出数组的每个元素,每个元素后都有一个换行符。要确认您的 to_s
方法正在将数字转换为字符串,请尝试使用 print
而不是 puts
。
至于输出的nil
,就是你函数的return值。除非有明确的 return
,否则函数的 return 值将是最后一行的评估,在您的情况下是:puts number
。 puts number
的return值为nil
;打印 number
的值是副作用,而不是 return 值。
我很好奇为什么第一行代码(不在函数内)输出确实是一个数组:
$ num = 233
$ number = num.to_s.split(//)
$ puts number
=> ['2', '3', '3']
我怀疑您实际上是在 num.to_s.split(//)
行之后看到的输出,而不是 puts number
行。
我在方法中调用 to_s
:
$ def my_function(num)
$ number = num.to_s.split(//)
$ puts number
$ end
$ my_function(233)
2
3
3
# => nil
在我看来就像是在函数内部,因为输出是 nil
,所以没有创建数组。为什么在方法内部调用 to_s.split(//)
时没有创建字符串数组?
此外,为什么 puts number
的输出看起来只是每个数字单独一行?我是否需要在函数中显式创建数组,然后显式将拆分后的数字压入其中?
您的函数正在调用 puts number
。那将显示它,而不是 return 它。 puts
returns nil 这就是为什么您对 my_function(233)
的调用是 returning nil 的原因。每行输出一个数字的原因是 puts
在将数组传递给它时所做的。每行一个元素。
试试这个代码:
puts [1,2,3]
puts '=' * 40
def my_function(num)
num.to_s.split(//)
end
x = my_function(233)
p x
当运行输出为:
1
2
3
========================================
["2", "3", "3"]
主要区别在于 my_function
不再显示任何输出。它只是 return 的结果。重要的是要记住 ruby 方法将 return 最后计算的语句作为结果。也就是说上面的方法和这个是一样的:
def my_function(num)
return num.to_s.split(//)
end
您在第一个代码段中看到的数组是拆分函数的计算结果。在函数之外尝试此操作: puts [1,2,3]
,您会发现结果没有变化。
如果你想让它以可爱的方式打印出来,请使用print
。
此致
当您在数组上调用 puts
时,它会分别输出数组的每个元素,每个元素后都有一个换行符。要确认您的 to_s
方法正在将数字转换为字符串,请尝试使用 print
而不是 puts
。
至于输出的nil
,就是你函数的return值。除非有明确的 return
,否则函数的 return 值将是最后一行的评估,在您的情况下是:puts number
。 puts number
的return值为nil
;打印 number
的值是副作用,而不是 return 值。
我很好奇为什么第一行代码(不在函数内)输出确实是一个数组:
$ num = 233
$ number = num.to_s.split(//)
$ puts number
=> ['2', '3', '3']
我怀疑您实际上是在 num.to_s.split(//)
行之后看到的输出,而不是 puts number
行。