我如何修改我的ruby方法,使它同时接受一块代码?
我有一个名为myFilter的方法,它接受一个数组,过滤掉不符合要求的元素 比如说我如何修改我的ruby方法,使它同时接受一块代码?,ruby,methods,yield,Ruby,Methods,Yield,我有一个名为myFilter的方法,它接受一个数组,过滤掉不符合要求的元素 比如说 arr = [4,5,8,9,1,3,6] answer = myfilter(arr) {|i| i>=5} 此运行将返回一个包含元素5、8、9、6的数组,因为它们都大于或等于5 我该怎么做呢?算法很简单,但我不明白在那种情况下我们是怎么做的 谢谢你。你能做到 def my_filter(arr, &block) arr.select(&block) end 然后打电话 my_f
arr = [4,5,8,9,1,3,6]
answer = myfilter(arr) {|i| i>=5}
此运行将返回一个包含元素5、8、9、6的数组,因为它们都大于或等于5
我该怎么做呢?算法很简单,但我不明白在那种情况下我们是怎么做的
谢谢你。你能做到
def my_filter(arr, &block)
arr.select(&block)
end
然后打电话
my_filter([1, 2, 3]) { |e| e > 2 }
=> [3]
但是您可以直接用一个块调用select
:)您可以这样做
def my_filter(arr, &block)
arr.select(&block)
end
然后打电话
my_filter([1, 2, 3]) { |e| e > 2 }
=> [3]
但是,您可以直接用块调用
select
:)我认为您当然不想使用select
方法或类似方法,但您想了解块是如何工作的
def my_filter(arr)
if block_given?
result = []
arr.each { |element| result.push(element) if yield element } # here you use the block passed to this method and execute it with the current element using yield
result
else
arr
end
end
我想当然地认为您不想使用
select
方法或类似方法,但您想了解块是如何工作的
def my_filter(arr)
if block_given?
result = []
arr.each { |element| result.push(element) if yield element } # here you use the block passed to this method and execute it with the current element using yield
result
else
arr
end
end
惯用的方法是:
def my_filter(arr)
return enum_for(:my_filter, arr) unless block_given?
arr.each_with_object([]) do |e, acc|
acc << e if yield e
end
end
def my_过滤器(arr)
返回(:my_filter,arr)的enum_,除非给出了block_?
与对象([])对齐的每个对象|
acc惯用的方式是:
def my_filter(arr)
return enum_for(:my_filter, arr) unless block_given?
arr.each_with_object([]) do |e, acc|
acc << e if yield e
end
end
def my_过滤器(arr)
返回(:my_filter,arr)的enum_,除非给出了block_?
与对象([])对齐的每个对象|
acc你写过你有这样的方法,但毕竟,你似乎没有这样的方法。你能给我们看看你的方法myFilter中的代码吗?你知道myFilter(arr){…}
相当于arr.select{…}
,不是吗?如果你想让我们告诉你如何修改你的方法,你可能应该向我们展示你的方法。你写过你有这样的方法,但毕竟,你似乎没有这样的方法。你能给我们展示你的方法myFilter中的代码吗?你知道myFilter(arr){…}
相当于arr.select{…}
,不是吗?如果你想让我们告诉你如何修改你的方法,您可能应该向我们展示您的方法。好的做法是为(:myfilter,*args)提供返回枚举,除非给出了block\u?
以便能够在没有块(lazy)的情况下调用此方法。好的做法是为(:myfilter,*args)提供返回枚举除非给出了block_?
,否则可以在没有块的情况下调用此方法(lazy.)