Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么Kernelp在标准输出上复制我的文本?_Ruby_Io - Fatal编程技术网

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