试着写我自己的全部?Ruby中的方法
在Enumerable中调用了一个方法 我试着通过自己写来学习Enumberable库的所有方法 这就是我到目前为止提出的试着写我自己的全部?Ruby中的方法,ruby,methods,enumerable,Ruby,Methods,Enumerable,在Enumerable中调用了一个方法 我试着通过自己写来学习Enumberable库的所有方法 这就是我到目前为止提出的all?方法。我有点理解它,但当我试图将初始化值传递给我的方法时,我被难住了 编辑对于记录,我知道我使用的枚举方法不是正确的方法,即,它是硬编码数组。这是为了自学。我只是想弄清楚如何将初始化值传递给我的all?方法。这就是为什么我首先编写enum,以确保它确实有效。请不要把这门课当作是字面上的福音。多谢各位 class LearningMethods def initi
all?
方法。我有点理解它,但当我试图将初始化值传递给我的方法时,我被难住了
编辑对于记录,我知道我使用的枚举方法不是正确的方法,即,它是硬编码数组。这是为了自学。我只是想弄清楚如何将初始化值传递给我的all?方法。这就是为什么我首先编写enum,以确保它确实有效。请不要把这门课当作是字面上的福音。多谢各位
class LearningMethods
def initialize(values)
@values = values
end
def enum
array = [10, 3, 5]
end
def all?(a)
yield(a)
end
end
c = LearningMethods.new([10, 3, 5])
p c.enum.all? {|x| x >= 3 } #this works
p c.all?(10) { |x| x >= 3 } #this works
p c.all?(@values) { |x| x >= 3 } #this doesn't work. Why not? And how do I pass the initialized values?
我不知道你为什么需要枚举?Enumerable是数组中包含的一个模块,所以如果您不熟悉它,我建议您阅读Ruby中的“模块和混合插件”
all?
只需将每个数组元素传递给块即可。如果有任何元素(至少1个)的块返回false,则all?
的计算结果为false。请尝试分析此代码:
class MyAllImplementation
def initialize(array)
@array = array
end
def my_all?
@array.each do |element| # for each element of the array
return true unless block_given? # this makes sure our program doesn't crash if we don't give my_all? a block.
true_false = yield(element) # pass that element to the block
return false unless true_false # if for ANY element the block evaluates to false, return false
end
return true # Hooray! The loop which went over each element of our array ended, and none evaluted to false, that means all elements must have been true for the block.
end
end
a = MyAllImplementation.new([1,2,3])
p a.my_all? { |x| x > 0 } #=> true
p a.my_all? { |x| x > 1 } # false, because 1 is not bigger than 1, it's equal to 1
请定义一下你的意思,这是行不通的。这里可能有各种各样的问题。从您显示的代码来看,
@values
未在故障行中使用的范围内定义。您的代码存在太多问题。我不确定指出它们对我是否有帮助。在尝试重新实现Enumerable之前,您应该仔细阅读类、块和成品的基本用法。与其尝试编写自己的方法,不如建议您实际看看这些方法是如何编写的。您可以通过浏览免费提供的Ruby源代码,或者点击“点击切换源代码”链接来查看您想要查看的方法。有些是用Ruby实现的,有些是用C实现的,但不管怎样,你都会看到它们是如何实现的。@Max,如果你愿意并且有时间这样做,请放心。我的感情不会受到伤害,我会学到比以前更多的东西。不过,请看一下我刚做的编辑。我非常感谢您花时间澄清我的代码,无论是出于什么原因。谢谢你们。@theTinMan,我实际上觉得这个练习很有趣,因为它迫使我研究Enumerable的方法,并试图理解它的作用。你的建议很好,但这也是另一种方法如果你真的想重新实现all?
,它也应该在没有阻塞的情况下工作(你的代码给出了LocalJumpError
)。我从来没有尝试过使用all?由于某种原因没有一个块,并且不知道它的行为,但现在在代码中添加了这种情况。@daremkd,有没有一种方法可以在没有每个迭代器的情况下实现这一点?我试图避免使用数组
和可枚举
库中的任何方法..全部?正在使用。每个都在后台。@daremkd它仍然不太正确<代码>全部?无块测试每个元素的真实性。这不仅仅是真的。