我正在为codecademy网站的Ruby部分进行练习。我所涉及的部分与yield语句有关。这是练习的原始代码。
def yield_name(name)
puts "In the method! Let's yield."
yield("Kim")
puts "In between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
yield_name("Eric") { |n| puts "My name is #{n}." }
以下是此挑战的说明:使用您的名称作为参数调用yield_name。确保传入一个块,其中包含#34;我的名字是#{你的名字在这里}!"
这是我最初尝试的内容:
def yield_name(name)
puts "In the method! Let's yield."
yield("Patrick")
puts "In between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
yield_name("Patrick") { |n| puts "My name is #{n}." }
当我提交此内容时,我被告知我需要第二次使用我的名字在块中调用yield_name。以下是我接下来尝试的内容:
def yield_name(name)
puts "In the method! Let's yield."
yield_name("Patrick")
puts "In between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
yield_name("Patrick") { |n| puts "My name is #{n}." }
当我提交这个时,我得到了第一个语句的无限循环:"在方法中!让我们收益。"其他一切都被忽略了。我需要帮助理解我的代码有什么问题,也许还有一些关于yield语句的澄清。我理解它正在让执行到另一个代码块,但这是我的理解程度。
提前谢谢。
答案 0 :(得分:2)
你真的不应该改变原始代码:
def yield_name(name)
puts "In the method! Let's yield."
yield("Kim")
puts "In between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
yield_name("Eric") { |n| puts "My name is #{n}." }
在你的情况下,你应该做的似乎是添加一个新的电话yield_name
将你的名字作为参数传递:
yield_name("Patrick") { |n| puts "My name is #{n}." }
整个代码现在应该如下:
def yield_name(name)
puts "In the method! Let's yield."
yield("Kim")
puts "In between the yields!"
yield(name)
puts "Block complete! Back in the method."
end
yield_name("Eric") { |n| puts "My name is #{n}." }
# Now call the method with your name!
yield_name("Patrick") { |n| puts "My name is #{n}." }