“The Well-Grounded Rubyist”一书第 3 版第 185 页是代码。而my_each的代码在183页,还涉及到184页的代码:
Class Array
# Put the definition of my_each here
def my_each
c = 0
until c == size
yield self[c]
c += 1
end
self
end
# Here ends my_each
def my_map
acc = []
my_each {|e| acc << yield e }
acc
end
end
# Code on page 184
names = ["David", "Alan", "Black"]
names.my_map {|name| name.upcase }
# Code on page 184 ends
运行时收到此错误消息:
page185a.rb:14: syntax error, unexpected local variable or method, expecting '}'
(SyntaxError)
my_each {|e| acc << yield e }
^
位于上行最后一个 e 的下方。
我尝试将线路的各个部分分成不同的部分 线,但我无论如何都无法让它工作。即使在另一个 程序中我遇到了产量问题,但我已经解决了 通过使用其他代码。但这个问题对我来说一直很难解决。我是 Ruby 新手,所以我需要学习这个。这两个程序的相同之处在于 << and yield.
的组合yield
是一个关键字,因此与其他运算符(例如 <<
)一起使用时,与普通方法调用具有不同的特殊性。在你的例子中,Ruby 解析你的 my_map
方法如下:
def my_map
acc = []
my_each {|e| (acc << yield) e }
acc
end
这是行不通的,因为
e
在这里不能作为参数。但是,您可以通过在yield调用的正确位置显式添加括号来避免此问题:
def my_map
acc = []
my_each {|e| acc << yield(e) }
acc
end