试着写我自己的全部?Ruby中的方法

试着写我自己的全部?Ruby中的方法,ruby,methods,enumerable,Ruby,Methods,Enumerable,在Enumerable中调用了一个方法 我试着通过自己写来学习Enumberable库的所有方法 这就是我到目前为止提出的all?方法。我有点理解它,但当我试图将初始化值传递给我的方法时,我被难住了 编辑对于记录,我知道我使用的枚举方法不是正确的方法,即,它是硬编码数组。这是为了自学。我只是想弄清楚如何将初始化值传递给我的all?方法。这就是为什么我首先编写enum,以确保它确实有效。请不要把这门课当作是字面上的福音。多谢各位 class LearningMethods def initi

在Enumerable中调用了一个方法

我试着通过自己写来学习Enumberable库的所有方法

这就是我到目前为止提出的
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它仍然不太正确<代码>全部?无块测试每个元素的真实性。这不仅仅是真的。