浅说ruby嵌套函数

深入解析STM32定时器中央对齐模式3的双中断机制 本文深入解析了STM32定时器中央对齐模式3的双中断机制。该模式在一个PWM周期内,会在计数器到达ARR(上溢)和0(下溢)时各触发一次更新中断,实现更精细的实时控制。文章详细阐述了其工作原理、配置方法,并指导如何在中断服务函数中通过DIR位区分中断来源,同时探讨了其在电机控制、数字电源等场景下的应用优势与CPU负载挑战。 阅读详情


想到这个问题是因为看了网上的一个问题,大家可以先看看:http://pivotallabs.com/users/nick/blog/articles/302-ruby-quiz-a-trick-question
 

我先从第二个问题开始讲起:
 
下面的演示可以在irb中,也可以自己写一个main.rb之类的文件运行尝试(我的ruby是1.9.3)
 
首先,开始看一个最简单的函数,
 

def foo  
    1  
end  



我们知道ruby的顶级作用域是一个名叫main的Object,那么foo是在self为main中定义的,那它是存在于哪里的呢?增加两行代码

puts private_methods.include?(:foo)  #=> true
puts Object.private_methods.include?(:foo)  #=> true
 

说明foo这个函数成为了Object类中的一个private方法。怎么回事呢?
 
这是因为ruby有一个当前类的概念,这里的当前类就是main的类型,即Object,所以,定义foo的时候,就是在Object中定义了一个private方法(附加问题:为什么是private?)
 

那回到那个日本人问的问题:
 

def foo  
    def foo  
        1  
    end  
end  


运行下面的代码:

puts private_methods.include?(:foo)  #=> true
puts Object.private_methods.include?(:foo)  #=> true
puts public_methods.include?(:foo)  #=> false
puts Object.public_methods.include?(:foo)  #=> false
puts foo  #=> nil
puts private_methods.include?(:foo)  #=> false
puts Object.private_methods.include?(:foo)  #=> false
puts public_methods.include?(:foo)  #=> true
puts Object.public_methods.include?(:foo)  #=> true
puts foo #=> 1 

 

这个时候应该注意到两个事情,第一个需要注意的是,当第一次调用foo的时候,返回值为nil,当第二次调用nil的时候,返回值为1。第二点需要注意的是,当第一次调用之前是foo属于Object的priavte方法,而当第一次调用结束以后,foo变成了Object的public方法。
 
首先解释第一个问题,当第一次运行foo的时候,foo的功能是定义一个返回值为1的foo方法,而这个新方法将会覆盖原来的方法,所以,第二次调用的时候返回值就是1了。
 
对于第二个问题的解释,不妨再看一个demo:
 

class C  
    def main  
        private_hello  
    end  
private  
    def private_hello  
        def public_hello  
            1  
        end  
    end  
end  
  
c =  C.new  
puts c.private_methods.include?(:private_hello)  #=> true
puts c.public_methods.include?(:public_hello)  #=> false
c.main  
puts c.public_methods.include?(:public_hello)  #=> true

 
从结果可以分析得到,虽然是在private的方法中定义了一个新的方法,但是新的方法与它在哪儿被定义的是没有关系的,这也就解释了为什么在原来private的foo方法中定义了一个新的foo方法,而新方法是public的原因了。
 

好,然后我们来看第二个问题。

def foo  
    def bar  
        1  
    end  
end  
  
puts foo.bar  #=> 1


 
小日本的问题:Is this some magical lightweight object creation syntax so you can do cool method chaining?
 
我只能说,呵呵,这其实不是什么神奇的语法,foo.bar的意思是向self.foo的返回值发送一个名为bar的方法
 
第一次调用foo在定义了bar的同时返回值是NilClass,也就说其实是没有返回值的然后是向nil发送了bar,这是什么意思呢?为什么可以行的通呢?想想前面的那个问题,不难理解,Object中存在了一个public方法,叫做bar再然后,nil是NilClass的一个对象,而NilClass是继承于Object,所以,如果向nil发送bar的时候,其实是会调用到Object的bar方法的

def foo  
    def bar  
        1  
    end  
end  
  
foo  
puts nil.methods.include?(:bar)  #=> true
puts NilClass.ancestors  #=> [NilClass, Object, Kernel, BaseObject]


应该说清楚了吧,好开心

 

Proteus仿真——电压比较器 电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。 阅读详情

相关推荐

整车 EOL下线 测试系统介绍

整车下线(EOL)测试专门针对整车进行设计开发,是车企将组装好的整车交付客户前的 最后一道检测工序。EOL 测试针对的是整车下线测试,不同于零部件下线,是整车级别的下线 测试,测试过程关系整车的每个零部件,其测试质量直接影响到整车的质量好坏。因此,整车EOL测试是整车下线必不可少的测试过程.

王小奎的博客 5480

ruby 嵌套函数_Ruby嵌套有示例的循环

ruby 嵌套函数 嵌套循环 (Nested for loop) Nesting of for loop means one for loop is available inside another for loop. It means that there are two loops, then the first one is an outer loop and the second one ...

cumt951045的博客 479

基于轻量级神经网络MobileNet V2的水果识别种类算法研究

本文阐述了一种基于轻量级卷积神经网络MobileNet V2的水果分类与识别算法研究。为了最大限度地促进机械收获,需要一个检测系统,它可以让我们识别不同类别的水果。一个相对未开发的想法是使用深度学习和人工智能算法,不仅可以检测水果的种类,还可以检测水果是否成熟。这可以证明是有利可图的,因为它可以提供作物生长状况以及成熟和未成熟果实的个体数量,以及决定是否是收获时间的有用信息。第一步对数据进行了预处理,数据预处理技术在众多的深度学习计算中起到了重要作用。

qq_43556680的博客 1640

ruby 嵌套函数_Ruby嵌套直到循环带有示例

ruby 嵌套函数 嵌套直到循环 (Nested until loop) Alike for, while, and do...while, until loop can also be nested for meeting the specific purpose. In this type of nesting, two until loops work in the combination ...

cumtb2002的博客 256

A股历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 2219

汇川PLC和PLC之间ModebusTCP通讯

然后在全局变量中创建相应的变量关联IW和QW的寄存器创建全部变量//AM402作为主站——读H3U(D12-D21)//AM402作为主站——写给H3U(D200-D209)或者使用数组的方式。

panjinliang066333的博客 3万+

hash ruby 定义 嵌套,嵌套类如何在Ruby中访问外部类中的方法?

def class Adef araise "hi" #can't be reachedendclass Bdef ba() #doesn't find method a.endendendI want to invoke a from b and raise the exception. How can I?解决方案Ruby doesn't have nested classes.The onl...

weixin_29416037的博客 231

SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明

SE-0526激光避障雷达扫描传感器广泛应用于原材料运输与处理、移动装配、托盘或货架运输、产成品自动运输、生产线自动对接,餐厅自助送餐等AGV小车、服务机器人、仓储机器人、无人叉车导航、避障、定位等。 本文重点介绍SE-0526激光避障雷达扫描传感器输入输出连线方法及PLC联机实例说明。

华翔天诚科技 2693

嵌套函数

一 介绍 所谓嵌套函数即在函数内部再定义一个函数,这样定义的优点在于可以使内部函数轻松获得外部函数的参数以及函数的全局变量等。 语法: <script type="text/javascript"> var outter=10; function functionName(parameters1,parameters2) { function InnerFunction...

iteye_5722的博客 1017

工商银行软件开发中心数据安全监测溯源防护体系建设成果及展望

结合业界先进溯源理念和我行管理要求,依托大数据、分布式搜索分析引擎等技术,构建PB级海量数据加工分析和小时级快速核验、检索、溯源手段(如图6所示),支撑6种客户敏感信息关键要素的单一或组合溯源,形成行之有效的数据安全溯源流程,配套落地自动化快速泄露样本真实性核验和灵活高效的溯源能力,通过数据相关属性的自动化分析,实现追踪泄露源头、明确泄露路径的目标,为有效应对数据安全事件,降低和消除风险与不良影响,开展事后追责处置工作提供体系化解决方案。提高数据排查的自动化程度和排查效率,降低人工成本。

银行信息系统应用架构详解 221

RK3588 固定hdmiin的dev/videoX节点

RK3588 固定hdmiin的dev/videoX节点

目前从事linux驱动开发,多交流多学习吧 2050

别再自己写日期工具类了!Hutool DateUtil这5个方法,帮你搞定90%的业务场景

本文详细介绍了Hutool DateUtil工具类的5个核心方法,帮助Java开发者高效处理90%的日期计算和格式化需求。从日期差计算、范围判断到格式化解析和计时器功能,DateUtil简化了复杂的日期操作,特别适合电商、报表统计等业务场景。

weixin_30696427的博客 539

一文搞定 ST22 短转储 MEMORY_NO_MORE_PAGING:看懂 SAP Paging 机制,参数 rdisp/PG_SHM 与 rdisp/PG_MAXFS 怎么设才稳

SAP系统MEMORY_NO_MORE_PAGING错误通常源于Paging资源耗尽而非物理内存不足。关键排查点包括:通过ST22确认错误类型,ST02监控Paging使用情况,检查工作进程trace中的"no more free blocks"提示。解决方案建议将rdisp/PG_SHM和rdisp/PG_MAXFS设为相同值(如250000块≈2GB),使Paging完全在内存中运行。同时需优化易耗Paging的代码逻辑,如避免滥用EXTRACT命令和超大内存对象传输。典型案例如月末

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 331

ruby 嵌套函数_Ruby嵌套do ... while循环示例

ruby 嵌套函数 嵌套do ... while循环 (Nested do...while loop) When two post-test loops i.e. do..while loops are working together for the fulfillment of a task, it is known as the nesting of the do...while loop....

417

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Ruby的常量在嵌套类与子类中的引用 —— 差异点

# 嵌套类 class Drawing PI = 123123 def Drawing.give_me_a_circle Circle.new end def xpi PI end class Line end class Circle def what_am_i "This is a circle" end def pi PI end

harli的专栏 1971

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Ruby中的各种方法定义和调用(函数式方法|实例方法|类方法)

1.ruby方法的定义 (1)不带参数的方法 def function_name   statement …… end 调用方式: function_name or function_name() (2)带参数的方法定义 def function_name(parm1, parm2, …)   statement …… end 调用方式: function_

@_囚徒-2018_的家园 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

函数的嵌套调用

def testB(): print('---- testB start----') print('这里是testB函数执行的代码...(省略)...') print('---- testB end----') def testA(): print('---- testA start----') testB() print('---- te...

PG_peng的博客 3907

Ruby 中一些好用的方法(注意reduce方法)

#####inject inject是我使用最频繁的方法了,它的强大之处在于可以方便的对嵌套的数组,哈希等混合数据结构进行合并或求和, 可以有效减少代码量。 例如最常见的数组套哈希: 1 2 3 4array = [{a:100}, {b:200}, {c:300}] array.inject(0) { |sum, e| sum += e.values.first } #600 arr

qwbtc的博客 3327

非常奇怪的rails3 rspec (describe) 问题: 慎重使用嵌套describe

非常奇怪的问题。 也许是自己没有深入看过rspec 文档。 [color=darkblue]慎重使用 嵌套的describe[/color] 今天使用了 gem : state_machine ([url=https://github.com/pluginaweek/state_machine] https://github.com/pluginaweek/state_machine[/...

sg552的专栏 239

ruby loop循环

loop是最原始的一个循环。 counter  = 0 loop do     counter += 1     print "Ruby"     break if counter > 29 end 如果循环体内没有break的话将会一直循环下去,这点比较容易忘记。 loop内可以有条件语句与next 关键字结合来判断是否跳到下一个循环。 多行代码推荐do e

maxiaokun55的专栏 2910

Ruby学习之模块(Module)的定义和使用

Ruby中的模块(Module)是一种把方法、类和常量组合在一起的方式,它提供了一个命名空间和避免名字冲突,并且实现了 mixin 装置。它的命名空间,相当于一个沙盒,在里边我们的方法和常量不会与其他地方的方法常量冲突,它和类很相似,但是它却不能被实例化,也没有子类,它只能被另一个模块定义。 语法很简单: module Identifier statement1 statemen...

luyaran的博客 2427

Map获取key值

有两种方法 public static void test4(){ Map<String, Object> map = new HashMap<>(); map.put("key1",1); map.put("key2",2); //第一种keySet() System.out.println("map.keySet():"+m...

deshi8958的博客 1295

hash ruby 定义 嵌套_Ruby的基础语法

Ruby 语法让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以,把下面的源代码放在 test.rb 文件中。#!/usr/bin/ruby -w puts "Hello, Ruby!";在这里,假设您的 /usr/bin 目录下已经有可用的 Ruby 解释器。现在,尝试运行这个程序,如下所示:$ ruby test.rb这将会产生下面的结果:Hello, Ru...

weixin_39671405的博客 248

ruby中类的层级关系

所有的类最终继承于Object,Object本身又继承于 BasicObject。BasicObject是ruby对象体系中的根节点。     'hello'.class =&gt; String String.class =&gt; Class String.superclass =&gt; Object Object.superclass =&gt; BasicOb...

wangsuting.blog 229

ruby 嵌套函数_嵌套属性Ruby在轨道上

ruby 嵌套函数Relationships can be very messy. Ideally they they are clean and make us happy, but rarely does that actually come to pass. Especially when you have a single table that acts as a lynchpin in ...

weixin_26741235的博客 240
上一篇: Silverlight DataBinding Converter:根据binding对象调整显示
下一篇: ruby单词单数复数相互转换
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值