在这个例子中:
def hello
puts "hi"
end
def hello
"hi"
end
第一个和第二个函数之间有什么区别?
答案 0 :(得分:8)
在Ruby函数中,当返回值不 显式定义时,函数将返回它评估的最后一个语句 < / em>的。如果仅评估了print
语句,则该函数将返回nil
。
因此,以下打印字符串hi
和返回 nil
:
puts "hi"
相反,以下返回字符串hi
:
"hi"
请考虑以下事项:
def print_string
print "bar"
end
def return_string
"qux" # same as `return "qux"`
end
foo = print_string
foo #=> nil
baz = return_string
baz #=> "qux"
但请注意,您可以print
和return
使用相同的功能:
def return_and_print
print "printing"
"returning" # Same as `return "returning"`
end
以上将print
字符串printing
,但返回字符串returning
。
请记住,您始终可以明确定义返回值:
def hello
print "Someone says hello" # Printed, but not returned
"Hi there!" # Evaluated, but not returned
return "Goodbye" # Explicitly returned
"Go away" # Not evaluated since function has already returned and exited
end
hello
#=> "Goodbye"
因此,总而言之,如果你想要打印某个函数,比如控制台/日志 - 请使用print
。如果您要返回该功能,不要只是print
它 - 确保明确地或默认地返回它
答案 1 :(得分:1)
第一个使用puts
方法将“hi”写入控制台并返回nil
第二个返回字符串“hi”并且不打印
这是irb会话中的一个例子:
2.0.0p247 :001 > def hello
2.0.0p247 :002?> puts "hi"
2.0.0p247 :003?> end
=> nil
2.0.0p247 :004 > hello
hi
=> nil
2.0.0p247 :005 > def hello
2.0.0p247 :006?> "hi"
2.0.0p247 :007?> end
=> nil
2.0.0p247 :008 > hello
=> "hi"
2.0.0p247 :009 >
答案 2 :(得分:0)
将打印件打印到控制台。 所以
def world
puts 'a'
puts 'b'
puts 'c'
end
将'a'然后'b'然后'c'打印到控制台。
def world
'a'
'b'
'c'
end
这会返回最后一件事,所以你只会看到'c'