Ruby 为什么Kernelp在标准输出上复制我的文本?
请看以下代码:Ruby 为什么Kernelp在标准输出上复制我的文本?,ruby,io,Ruby,Io,请看以下代码: def hello p "Hey!" end p hello 输出将是: "Hey!" "Hey!" => "Hey!" 我的结论是:puts本身返回文本,这些文本将以Ruby代码输出,否则它将无法打印!再一次打印字符串时发生了什么?如果puts不直接将其发送到标准输出,由谁负责以及如何发送?如果p方法返回给定的字符串,那么hello也将返回该字符串,这意味着辅助p调用将重复该字符串 这可能就是puts默认返回nil的原因。所有方法都返回一个值 在Ruby中,几乎
def hello
p "Hey!"
end
p hello
输出将是:
"Hey!"
"Hey!"
=> "Hey!"
我的结论是:puts本身返回文本,这些文本将以Ruby代码输出,否则它将无法打印!再一次打印字符串时发生了什么?如果puts不直接将其发送到标准输出,由谁负责以及如何发送?如果p方法返回给定的字符串,那么hello也将返回该字符串,这意味着辅助p调用将重复该字符串
这可能就是puts默认返回nil的原因。所有方法都返回一个值
在Ruby中,几乎所有东西都返回一个值,即使该值为零。但是,在您的情况下,问题在于它们返回的值不同
def hello
# Print string literal, then return
# the printed object.
p "Hey!"
end
# Print the return value of main#hello.
p hello
结果,字符串在方法内部打印一次,然后将方法的返回值传递给Kernelp并再次打印。这是故意的
使用kernelput避免重复输出
这将导致在方法内部打印字符串文字,然后打印一个空行,因为方法的返回值为nil
Hey!
=> nil
正确的方法
如果要避免空白行,请避免多次发送到标准输出。例如:
def hello
'Hey!'
end
p hello
你的意思是puts首先将文本发送到输出,然后返回文本?为什么?什么时候需要?返回puts方法inputIt正是p方法所做的。你为什么要用那种方法?它只在irb内部有用。puts是首选的输出方法。代码中没有puts。“你为什么提到看跌期权?”sawa可能是因为OP认为p只是看跌期权的简写。这不是一个罕见的错误。
def hello
'Hey!'
end
p hello