Codecademy Ruby yield关键字

时间:2015-06-25 23:10:14

标签: ruby

我正在为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语句的澄清。我理解它正在让执行到另一个代码块,但这是我的理解程度。

提前谢谢。

1 个答案:

答案 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}." }