我的代码存在问题,它不需要参数,我想创建一个返回答案的方法。我不知道如何通过价值。 请问这个概念的名称是什么,所以我可以阅读。
describe "reverser" do
it "reverses the string returned by the default block" do
result = reverser do
"hello"
end
result.should == "olleh"
end
end
def reverser(sent)
words = sent.split(" ")
i = 0
while i < words.length
words[i] = words[i].reverse
i += 1
end
words.join(" ")
end
答案 0 :(得分:3)
def reverser
yield.reverse
end
以下是相关代码:
result = reverser do
"hello"
end
这相当于:
result = reverser() do
"hello"
end
打破这一点:
method call -+ +- 'do' marks the start of the block
| |
V V
result = reverser() do
"hello"
end
^
|
+--- end of the block
块就像一个方法,就好像块作为一个不可见的参数传递给reverse()方法。在reverse()内,您可以使用yield
:
def reverser
return_value_of_block = yield
return_value_of_block.reverse
end
撰写yield
或yield()
就像撰写unamed_block_method()
一样。换句话说,yield
是ruby为块方法赋予的名称。
如果该块应该接受参数,那么该块将如下所示:
result = do_stuff do |x|
x * 2
end
do_stuff()将如下所示:
def do_stuff
return_value_of_block = yield(4) #call block with the argument 4
end
请问这个概念的名称是什么,所以我可以读一读。
搜索ruby blocks
。
答案 1 :(得分:0)
您的反向器会使用您调用的块来获取它的返回值:
def reverser(&block)
string = block.call
string.reverse
end
注意:您不需要string
变量。我只是出于可读性的原因使用它。您也可以写block.call.reverse
。