热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Ruby方法中使用lambda

如何解决《在Ruby方法中使用lambda》经验,为你挑选了1个好方法。

我刚刚开始,Ruby我遇到了一些我认为对语言很重要的问题所以我不想只是通过它.我真的很感激答案,其中不仅包括一个工作实例,还包括至少简要解释我哪里出错了.

所以第一步骤由具有此方法:

def filter (arr)
    arr.each do |e|
        puts e if e % 2 != 0
    end
end 

filter [1, 2, 3, 4, 5, 6]

而预期的结果是:

1 3 5 [0.2秒内完成]

其次我试过这个:

def filter (arr)
    arr.each do |e|
        puts e if yield(e)
    end
end 

filter ([1, 2, 3, 4, 5, 6]) { |n| n.odd? }

我得到了同样的结果:

1 3 5 [0.2秒内完成]

第三,我想用lambda做到这一点.最终我想要filter像这样调用方法filter([1, 2, 3, 4, 5, 6], &is_odd).但是,由于我仍然无法弄明白,我目前仍然坚持这个:

is_odd = lambda { |n| puts n if n.odd? }

def filter ()
    arr = [1, 2, 3, 4, 5, 6]
    arr.each do |e|
        is_odd(e)
    end
end 

filter &is_odd

我收到以下错误:

block in filter': undefined methodis_odd'for main:Object(NoMethodError)

对我来说这是有道理的,因为如果我在filter函数中定义lambda 并使用它就像这样:

def filter ()
    is_odd = lambda { |n| puts n if n.odd? }
    arr = [1, 2, 3, 4, 5, 6]
    arr.each &is_odd
end 

filter

我再次得到预期的行为,但我正在遵循一个教程,似乎应该可以is_oddfilter方法之外声明并调用过滤器这样filter([1, 2, 3, 4, 5, 6], &is_odd).

我想知道是否确实可以这样使用lambda,如果是的话,我的逻辑在哪里失败了?



1> Sergio Tulen..:

我想知道是否确实可以这样使用lambda

是.

如果是的话,我的逻辑在哪里失败了?

通过传递lambda &is_odd,你将它变成方法的一个块.所以,将它用作块.在上面的代码段中,您会显示您所知道的内容yield.这是调用传递块的另一种方法.

is_odd = lambda { |n| puts n if n.odd? }

def filter(&block)
    arr = [1, 2, 3, 4, 5, 6]
    arr.each do |e|
        block.call(e)
    end
end 

filter(&is_odd)
# >> 1
# >> 3
# >> 5


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
author-avatar
手机用户2702938061
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有