- 浏览: 3048031 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
还从来没想过或者写过这么麻烦的东西,天啊。
刚才在看去年的RailsConf上Wilson Bilkovich的关于Rubinius的访谈。他提到有些他以为会很容易实现的东西结果异常困难,然后举了个默认参数与lambda组合使用的例子。据说是Ola提出的test case,hmm。
我突然兴奋,暂停了视频播放,打开irb然后玩了一下:
看上去确实没什么,很直观的语言构造。不过稍微想象这东西要如何实现,一下全身鸡皮都起来了 =_=|| 主要上面的实验里还没把闭包的真正威力用出来。让我们来看看:
虽然还是很正确很明白的Ruby代码……可是要把这“此x非彼x”关系弄明白真是麻烦。不过在默认参数里放闭包这种事情我还真是没想过。
Wilson提到的问题是他们对局部变量的处理问题吧。大概参数y声明的时候,局部变量还没分配空间之类的问题,然后那个block就不知道捕获哪里的x好。后来似乎是通过修改局部变量的分配方式来解决。
回头我得拿DolphinScript来实验下看看是不是会有奇怪的事情发生才行。
刚才在看去年的RailsConf上Wilson Bilkovich的关于Rubinius的访谈。他提到有些他以为会很容易实现的东西结果异常困难,然后举了个默认参数与lambda组合使用的例子。据说是Ola提出的test case,hmm。
我突然兴奋,暂停了视频播放,打开irb然后玩了一下:
>irb irb(main):001:0> def foo( x = 5, y = lambda { puts x } ) irb(main):002:1> y.call irb(main):003:1> end => nil irb(main):004:0> foo 5 => nil irb(main):005:0> i = 2 irb(main):006:0* foo i, lambda { puts i + 1 } 3 => nil irb(main):007:0> foo 1 1 => nil
看上去确实没什么,很直观的语言构造。不过稍微想象这东西要如何实现,一下全身鸡皮都起来了 =_=|| 主要上面的实验里还没把闭包的真正威力用出来。让我们来看看:
>irb irb(main):001:0> x = 1 => 1 irb(main):002:0> def foo( x, y = lambda { |x| x *= 5 } ) irb(main):003:1> x += 1 irb(main):004:1> y.call x irb(main):005:1> x irb(main):006:1> end => nil irb(main):007:0> foo 1 => 10 irb(main):008:0> x => 1 irb(main):009:0> foo x => 10 irb(main):010:0> x => 1 irb(main):011:0> foo x, lambda { |x| x *= 5 } => 2 irb(main):012:0> x => 10
虽然还是很正确很明白的Ruby代码……可是要把这“此x非彼x”关系弄明白真是麻烦。不过在默认参数里放闭包这种事情我还真是没想过。
Wilson提到的问题是他们对局部变量的处理问题吧。大概参数y声明的时候,局部变量还没分配空间之类的问题,然后那个block就不知道捕获哪里的x好。后来似乎是通过修改局部变量的分配方式来解决。
回头我得拿DolphinScript来实验下看看是不是会有奇怪的事情发生才行。
发表评论
-
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21489(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
RubyConf notes
2011-11-08 19:10 0symmetric coroutine Fiber#trans ... -
ShanghaiOnRails第八次线下活动——你不需要知道的Ruby实现
2010-11-12 15:39 2841上个月底正好赶上参加了ShanghaiOnRails 第八次线 ... -
JRuby的运行模式
2010-11-01 11:21 0// 老的JRuby还是用org.jruby.evaluato ... -
你不需要知道的Ruby草稿
2010-10-27 11:25 0一些Ruby实现 Ruby 1.8 树遍历解释 Ruby 1 ... -
Ruby里的fiber/coroutine例子
2010-01-26 18:33 0Ruby 1.9开始支持fiber。与“fiber”一词的一般 ... -
JRuby使用技巧收集
2009-12-28 09:35 0java.lang.Thread.new { puts &qu ... -
特殊类型的eigenclass
2009-12-17 03:39 0Fixnum的实例没有eigenclass true、fals ... -
奇怪的参数
2009-12-08 02:25 0默认参数与闭包的组合 真正的问题不是只是默认参数看起来很诡异, ... -
MacRuby的执行模式
2009-12-07 07:41 0mailing-list macruby-devel http ... -
Rubinius的执行模型
2009-12-05 15:22 0Rubinius wants to help YOU make ... -
Ruby 1.8和1.9中String#hash的实现
2009-11-22 18:23 01.8 string.c int rb_str_hash(s ... -
To囧:拿你来测测Watir...
2009-11-21 22:38 3441iaimstar 写道@RednaxelaFX 你最近ruby ... -
[标题党] MagLev中GC类的真相……
2009-11-21 14:46 0注意到本文的标题:我是说“GC类”的真相,不是说GC的真相哦~ ... -
小试rubyzip的一个脚本
2009-11-17 20:42 3455呼,今天开始3天都是新人培训,总算可以抽点时间发一帖。 现在在 ... -
爬一下Google和百度看口碑对它们做的SEO效果如何
2009-11-09 00:27 0#!/usr/bin/env ruby require ... -
把Mechanize的html_parser改回到Hpricot
2009-11-08 14:45 3115记得我最初开始用Nokogir ... -
使用新的RubyInstaller
2009-11-07 02:37 0Hpricot的安装需要编译,需要devkit -
Ruby metaprogramming tech notes
2009-09-28 15:39 0class Builder def self.build ...
相关推荐
深入理解函数参数与闭包是提升JavaScript技能的关键。 1. **函数参数** - **参数是什么**:函数参数是在定义函数时用于接收外部数据的占位符。这些数据可以影响函数执行的结果。例如: ```javascript function ...
闭包是函数和声明该函数的词法环境的组合。换句话说,闭包允许一个函数访问并操作函数外部的变量。创建闭包的常见方式是在一个函数内部创建另一个函数,该函数可以访问外部函数的变量,即使外部函数已经执行完毕。 ...
具体来说,闭包是由函数及与其相关的引用环境组合而成的一个整体。 #### 二、闭包的组成 闭包主要由以下几个部分组成: - **函数**:闭包的核心是一个函数。 - **环境**:函数运行时所处的作用域环境。 - **外部...
默认方法是另一个与闭包相关的特性,它是 Java 8 中接口的一个增强。默认方法允许接口定义一个带有实现的方法,这样在不破坏已有实现的情况下,可以向接口添加新的功能。例如,`java.util.Comparator` 接口有一个...
闭包是函数以及声明该函数的词法环境的组合。当函数在其被定义的作用域之外的地方被调用时,它仍能访问定义时的词法作用域,这便是闭包的特性。简单来说,闭包可以理解为是函数内定义的函数,它可以访问到其父函数...
2. **活动对象**:在函数执行时创建,用于存储函数参数、局部变量等信息。它是一个内部对象,不可直接通过JavaScript代码访问。 3. **作用域**:定义了变量的作用范围。每个函数都有自己的作用域,通常指在其定义时...
函数作为参数的另一个好处是函数组合。通过将小的、单一职责的函数组合起来,我们可以构建出复杂的逻辑,同时保持代码的简洁性和可读性。这种编程风格被称为函数式编程,它强调无副作用和纯函数,有助于减少错误并...
JavaScript中的闭包是一种高级特性,它是函数和其周围状态(词法作用域)的组合,即使函数在其定义的作用域之外被调用,它仍然能访问到这些状态。这个概念是JavaScript编程中的核心部分,尤其在处理异步操作、模块化...
在函数做参数时,闭包是一个关键概念。闭包是一个函数,它“记住”了创建它的环境,即包含了自由变量的引用。这使得函数即使在原始作用域不再存在的情况下,也能访问到那些变量。 4. **回调函数** 回调函数是作为...
闭包是函数及其相关的引用环境组合在一起形成的实体,它使得局部变量在函数执行完毕后依然保持存活状态。这对于那些习惯于C/C++等静态语言的开发者来说可能是一个新的概念。 1. **闭包的概念和特点**: - 闭包是一...
### Rust 编程艺术:迭代器与闭包的精妙运用 #### 一、Rust 语言概述 Rust 是一种高性能的系统级编程语言,它由 Mozilla 研究院发起,Graydon Hoare 设计,并于 2010 年首次发布。Rust 的设计目标在于提供内存安全...
闭包(Closure)是函数和声明该函数的词法环境的组合。简单来说,一个闭包允许一个函数访问并操作函数外部的变量。在JavaScript中,由于函数是一等公民,即函数可以作为参数传递,也可以作为值返回,这为闭包的形成...
每当函数作为返回值或者作为其他函数的参数时,就会形成闭包。闭包可以记住并访问定义它的作用域内的变量,即使函数已经执行完毕,这些变量仍然保留。这使得闭包成为存储数据和创建私有变量的有效工具。以下是一个...
函数参数分为形式参数(形参)和实际参数(实参)。 - 形参是在函数定义时声明的变量,用于接收函数调用时传递的实际值。 - 实参是在函数调用时提供的值。 JavaScript函数的参数特性包括: - **参数个数不固定**...
其次,闭包是基于词法作用域和函数对象作为一等公民这两个特性的组合。闭包的存在,意味着函数可以记住并访问其定义时的作用域,即使函数在其定义作用域外被执行。在JavaScript中,当一个函数作为另一个函数的返回值...
所以,闭包是由函数和与其相关的引用环境组合而成的实体。 一、函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 >>> def lazy_sum(*args): ... def sum(): ... ax = 0 ... for n...
这两个新函数在执行时会将各自参数与之前传递的值相加。关键在于,内部函数能够访问并记住外部函数的局部变量,这就是闭包特性的一种体现。 例如: ```javascript function addNum(x) { return function(y) { ...
闭包是函数和其相关引用环境的组合,即使在外部函数执行完毕后,这些引用依然被保留。通过闭包,我们可以创建具有持久状态的函数,这是在动态语言中实现数据封装的一种方式。 在Python中,函数是第一类对象,意味着...
7. **默认参数和剩余参数**:默认参数允许我们在定义函数时为参数提供默认值,而剩余参数(`...rest`)则能捕获未指定位置的剩余参数,方便处理不定数量的输入。 8. **异步函数**:随着Promise和async/await的引入...
而`a`和`b`的组合则展示了闭包如何保持对变量`i`的引用,即使在`a`函数执行完毕后,`b`仍然可以访问并修改`i`的值。 在jQuery中,闭包同样被广泛使用。例如,常见的插件编写方式就是一个闭包的例子。像这样的代码:...