首页
学习
活动
专区
圈层
工具
发布

【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

文章目录 一、闭包中调用 Groovy 脚本中的方法 二、owner 与 delegate 区别 三、闭包中调用 Groovy 对象中的方法 一、闭包中调用 Groovy 脚本中的方法 ---- 在 Groovy..., 这是无法改变的 ; 但是 Closure 闭包对象的 delegate 成员是可以修改的 ; 三、闭包中调用 Groovy 对象中的方法 ---- 在闭包中 , 可以直接调用 Groovy 脚本中定义的方法...; 但是如果想要在闭包中 , 调用实例对象的方法 , 就必须设置闭包的 delegate 成员 ; 如下代码中 , 想要在闭包中 , 调用 Test 对象的 fun 方法 , 在执行闭包之前 , 必须将...闭包的 delegate 设置为 Test 实例对象 ; closure.delegate = new Test() 之后使用 closure() 调用闭包 , 在闭包中执行 fun 方法 , 就会在代理...} } // 闭包中不能直接调用 Test 对象中的方法 // 此时可以通过改变闭包代理进行调用 def closure = { fun() } closure.delegate = new

3.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Groovy】集合遍历 ( 使用集合的 find 方法查找集合元素 | 闭包中使用 == 作为查找匹配条件 | 闭包中使用 is 作为查找匹配条件 | 闭包使用 true 作为条件 | 代码示例 )

    文章目录 一、使用集合的 find 方法查找集合元素 1、闭包中使用 == 作为查找匹配条件 2、闭包中使用 is 作为查找匹配条件 3、闭包中使用 true 作为查找匹配条件 二、完整代码示例 一、...使用集合的 find 方法查找集合元素 ---- 集合的 find 方法 , 传入一个闭包 , 闭包中定义查找的匹配条件 ; 特别注意 , 查找匹配条件时 , Groovy 中的 " == " 符号 相当于...== 作为查找匹配条件 在集合的 find 方法中 , 闭包中使用 == 作为查找匹配条件 , 查找集合中值为 “1” 的元素 , 此处的 == 等价于 Java 中调用 String 的 equals...is 作为查找匹配条件 在集合的 find 方法中 , 闭包中使用 is 作为查找匹配条件 , 查找集合中与 “3” 对象相同地址的元素 , 此处的 is 方法等价于调用 String 的 == 运算...在集合的 find 方法中 , 闭包中使用 true 作为查找匹配条件 , 查找集合中不为空的元素 , 此处返回第一个不为空的元素 ; 代码示例 : // III.

    2.2K10

    【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )

    文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 在 Groovy 中的 Closure 闭包中 , 直接调用外部对象的方法 , 会报错 ; class Test { def fun...Groovy.groovy) at Groovy.run(Groovy.groovy:14) Process finished with exit code 1 二、解决方案 ---- 在 Closure 闭包中..., 如果要调用外部对象的方法 , 需要先设置 Closure 闭包对象的 delegate 成员为指定的外部对象 ; class Test { def fun() { println..."fun" } } // 闭包中不能直接调用 Test 对象中的方法 // 此时可以通过改变闭包代理进行调用 def closure = { fun() } closure.delegate...= new Test() closure() 设置完 Closure 闭包对象的 delegate 之后 , 的执行效果 :

    1.2K20

    Laravel源码解析之中间件

    上面概述了下中间件在laravel中的角色,以及什么类型的代码应该从控制器挪到中间件里,至于如何定义和使用自己的laravel 中间件请参考官方文档。...getSlice方法,他返回的也是一个闭包,在闭包会里解析出中间件对象、中间件参数(无则为空数组), 然后把$passable(请求对象), $stack和中间件参数作为中间件handle方法的参数进行调用...callback返回的闭包都会作为参数$stack传递给下一次对callback的调用,arrayreduce执行完成后就会返回一个嵌套了多层闭包的闭包,每层闭包用到的外部变量$stack都是上一次之前执行...,依然是利用Pipeline对象来传送请求对象通过收集上来的这些中间件然后到达最终的目的地,在那里会执行目的路由的run方法,run方法里面会判断路由对应的是一个控制器方法还是闭包然后进行相应地调用,最后把执行结果包装成...限于篇幅和为了文章的可读性,收集路由和控制器中间件然后执行路由对应的处理方法的过程我就不在这里详述了,感兴趣的同学可以自己去看Router的源码,本文的目的还是主要为了梳理laravel是如何设计中间件的以及如何执行它们的

    1.7K30

    【黄啊码】一篇文章带你了解php中的闭包和匿名函数

    不过匿名函数仍然是函数,因此可以调用,还可以传入参数,适合作为函数或方法的回调。 闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在。...不过闭包没有函数名。 注:我们之所以能调用$greet变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invoke方法。...从父作用域继承变量 在PHP中必须手动调用闭包对象的bindTo方法或使用use关键字把父作用域的变量及状态附加到PHP闭包中。而实际应用中,又以使用use关键字实现居多。...而从父作用域继承变量的使用场景在Laravel底层源码中也是俯拾即 bindTo方法 我们在前面已经提到,闭包是一个对象,所以我们可以在闭包中使用$this关键字获取闭包的内部状态,闭包对象的默认状态没什么用...__invoke的作用前面已经说过,当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

    66610

    深入浅出 Laravel 路由执行原理

    执行路由配置的闭包(或控制器)返回响应 $response。...) 方法完成; 2.1 在运行路由闭包或控制器方法时,将采用类似 HTTP kernel 的 handle 执行方式去运行当前路由适用的局部中间件; 2.2 在最终的 then 方法内部会执行 $route...执行路由闭包或控制器 最后,让我们进入 Illuminate\Routing\Route 源码研究下一个路由闭包或控制器是如何被执行的: 闭包或控制器,并返回响应结果。...总结 在这篇文章我们主要学习一下几个有关路由处理的相关知识: Laravel 中的路由如何被加载到项目中; 如何接收 HTTP 请求; 如何依据 HTTP 请求($request)查找所匹配的路由; 运行路由闭包或控制器方法

    7.4K30

    Laravel 路由使用入门

    而我们的 Laravel 从入门到精通系列教程之旅也将从路由开始,在这篇真正意义上的开篇教程中,我们将学习如何定义路由,然后将其指向要执行的代码,并处理各种路由需求。...,闭包简单快捷,但是随着应用体量的增长,将日趋复杂的业务逻辑全部放到路由文件中显然是不合适的,另外,通过闭包定义路由也无法使用路由缓存(稍后会讲到)从而优化应用性能。...对于稍微复杂一些的业务逻辑,我们可以将其拆分到控制器方法中实现,然后在定义路由的时候使用控制器+方法名来取代闭包函数: Route::get('/', 'WelcomeController@index'...你可以将之前定义的闭包函数内的代码移植到 index 方法中,效果完全一样(WelcomeController 需要自己创建,我们会在后面的控制器部分讲解如何快速创建),现在先略过不表。...路由命名很简单,只需在原来路由定义的基础上以方法链的形式新增一个 name 方法调用即可: Route::get('user/{id?}'

    3.3K50

    基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究

    如果这是个广播事件,则进行广播事件推送处理,然后继续往后执行,从 listeners 数组中通过事件名解析出所有与之映射的监听器处理逻辑,由于映射的监听器处理逻辑此时都是闭包函数,所以需要调用对应的闭包函数才能真正执行这些处理逻辑...: $response = $listener($event, $payload); 不同类型监听器底层处理逻辑 我们接下来来分析 makeListener 方法底层是如何通过闭包函数封装监听器的事件处理逻辑的...,首先会解析监听器处理事件的方法,默认是 handle 方法,如果该方法不存在,则使用 __invoke 方法(所以在 IncreasePostViews 中,还可以定义 __invoke 方法替代 handle...而在上一层 createClassListener 方法中,不管推送到队列还是直接执行,所有事件监听器处理逻辑最终都会通过闭包函数封装返回给上一层调用代码。...至此,我们就取得了所有类型事件监听器的处理逻辑闭包函数: 对于字符串类型的监听器类,如果实现了 ShouldQueue 接口,则返回推送到队列的闭包函数,否则返回直接执行监听器实例处理方法的闭包函数;

    3.8K30

    你真的了解php吗?

    这种的处理存在的问题是:当文件特别大,一次读取就占用很多内存资源。而生成器最适合这种场景,因为这样占用的系统内存量极少。 5. 闭包 理论上,闭包和匿名函数是不同的概念。...$closure变量,是因为这个变量的值是个闭包,而且闭包对象实现了__invoke()魔术方法。...只要变量名后有(),PHP就会查找并调用__invoke()方法。 附加状态 使用use关键字可以把多个参数传入闭包,此时要像PHP函数或方法的参数一样,使用逗号分隔多个参数。 <?...$clay = enclosePerson('Clay'); // 传入参数,调用闭包echo $clay('get tea!')...因此,这个服务器很难使用多数流行的PHP框架中常见的前端控制器。PHP内置的服务器使用路由器脚本弥补了这个遗漏的功能。

    2.3K50

    通过修改Laravel Auth使用salt和password进行认证用户详解

    MYSQL建议使用5.7以上的版本】/改用户登录 修改登录前我们需要先通过路由规则看一下登录请求的具体控制器和方法,在上文提到的auth方法定义里可以看到 $this->get('login', 'AuthAuthController...对象供Laravel Auth使用,好了做完这些修改后Laravel的Auth在做用户登录验证的时候采用的就是自定义的salt + password的方式了。...validator对输入进行验证,接下来在程序里传递把新密码和一个闭包对象传递给Password::broker($broker)->reset();方法,这个方法定义在IlluminateAuthPasswordsPasswordBroker...方法里,程序会先对用户提交的数据做再一次的认证,然后把密码和用户实例传递给传递进来的闭包,在闭包调用里完成了将新密码更新到用户表的操作, 在闭包里程序调用了的PasswrodController类的resetPassword...注:使用的Laravel版本为5.2

    3.6K30

    Laravel源码分析之Route

    路由是外界访问Laravel应用程序的通路或者说路由定义了Laravel的应用程序向外界提供服务的具体方式:通过指定的URI、HTTP请求方法以及路由参数(可选)才能正确访问到路由定义的处理程序。...无论URI对应的处理程序是一个简单的闭包还是说是控制器方法没有对应的路由外界都访问不到他们,今天我们就来看看Laravel是如何来设计和实现路由的。...下面我们从路由的注册、加载、寻址这几个阶段来看一下laravel里是如何实现这些的。...request); return $this->router->dispatch($request); }; 在闭包里调用了router的dispatch方法,路由寻址就发生在dispatch的第一个阶段...,runRoute的过程通过上面的源码可以看到其实也很复杂, 会收集路由和控制器里的中间件,将请求通过中间件过滤才会最终到达目的地路由,执行目的路由地 run()方法,里面会判断路由对应的是一个控制器方法还是闭包然后进行相应地调用

    2.4K30

    【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )

    文章目录 一、使用闭包创建接口对象 ( 接口中有一个函数 ) 二、使用闭包创建接口对象 ( 接口中有多个函数 ) 三、完整代码示例 一、使用闭包创建接口对象 ( 接口中有一个函数 ) ---- 在 Groovy..., 也可以创建上述接口对象 , 闭包中的内容就是唯一的抽象函数内容 ; // 使用闭包创建接口对象 OnClickListener listener = { println "OnClickListener..." } 调用 listener.onClick() 执行接口函数 , 执行结果如下 : OnClickListener 代码示例 : // I...., 在闭包后面添加 as 接口名 代码 , 如下 : // 使用闭包创建接口对象 OnClickListener2 listener2 = { println "OnClickListener2..." } as OnClickListener2 上述方法会默认将接口的多个方法都设置为上述闭包方法 ; 执行接口对象的 onClick 和 onLongClick 方法 , 执行的都是相同的闭包方法 ;

    4.8K30

    Laravel处理请求的工作流程

    然后,它通过调用 bootstrap/app.php 文件来引导 Laravel 应用。3....请求解析Laravel 使用 Illuminate\Http\Request 类来封装 HTTP 请求。这个类包含了请求的所有信息,如路径、查询字符串、头部信息等。b....路由和控制器根据请求的 URL 和 HTTP 方法,Laravel 会通过路由系统找到对应的路由和控制器方法。路由定义在 routes 目录下的文件里,例如 web.php 和 api.php。...每个路由可以关联到一个控制器方法或一个闭包函数。e. 控制器和响应如果路由指向一个控制器方法,Laravel 会实例化该控制器并调用相应的方法来处理请求。...控制器方法可以返回一个视图、重定向响应、JSON 响应等。f. 视图和模板如果控制器返回一个视图,Laravel 会渲染视图并返回给用户。视图通常使用 Blade 模板引擎来创建。g.

    90300

    PHP-web框架Laravel-路由(二)

    路由组在Laravel中,可以使用Route::group方法来将相关的路由分组在一起。...命名空间在Laravel中,可以使用Route::namespace方法来指定控制器的命名空间。...这意味着所有的控制器都将在App\Http\Controllers\Admin命名空间中查找。控制器在Laravel中,可以将路由指向一个控制器的方法,而不是指向一个闭包函数。...例如,下面的代码定义了一个路由,它将请求指向一个名为“UserController”的控制器,并调用其中的“index”方法:Route::get('/users', 'UserController@index...RESTful路由在Laravel中,可以使用Route::resource方法定义RESTful风格的路由。RESTful路由是一种规范化的路由风格,用于创建、读取、更新和删除资源。

    1K51

    laravel 学习之路 路由视图初探

    之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或 web 应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的业务逻辑更为适合。这时候,我们就应该使用控制器。...了解 MVC 的都对控制器的作用有所了解,控制器是实现主要业务逻辑的。在其他框架,控制器一般就是一个类,laravel 也不例外,laravel 的控制其结构并没有什么特殊。 控制器比作多部手机设备变很好理解 配置路由 laravel 的每一个路由是需要手动定义的,Laravel 的控制器非常的干净,与其他类的耦合度相当的低。...得益于 laravel 的 IoC 容器,我们很容易实现相当丰富的功能,且不会产生紧密耦合。那么如何才能访问到这个控制器里的逻辑呢?...其中 Route 是一个静态类 ,get是Route类的静态方法,get方法传递了2个参数,第一个是 / 、第二个是一个闭包并且在闭包函数中return返回的东西就是我们请求到的内容,从中可以看出

    1.8K10

    Laravel框架关键技术解析

    ,一个是composer生成的基于PSR规范的自动加载函数,另一个是Laravel框架核心别名的自动加载函数 B.匿名函数 1.匿名函数(Anonymous functions)也叫闭包函数(Closure...2.使用static来实现,通过这种机制,“static::”不再被解析为定义当前方法所在的类,而是在实际运行时计算得到的,即为运行时最初调用的类,不仅限制于静态方法的调用 3.后期静态绑定还可以用于对象实例化中...,如query()方法中(new static)->newQuery(); F.Laravel中使用的其他新特性 1.trait 优先级:当前类的方法会覆盖trait中的方法,trait中的方法会覆盖基类的方法...:Route::方法名('资源标识’,闭包函数或控制器响应函数标识); 路由参数:Route::get(‘资源标识/{参数名[?]...[/{参数名}……]} ‘,闭包函数或控制器响应函数标识)[->where(‘参数名’,'正则’)]; 路由命名:Route::get('资源标识’,[‘as’=>’命名’,uses=>闭包函数或控制器响应函数标识

    14.3K20

    PHP-web框架Laravel-路由(一)

    路由是Web应用程序中最重要的组件之一。路由是将HTTP请求映射到应用程序中正确控制器的机制。在Laravel中,路由负责确定应用程序如何响应传入的HTTP请求。...web.php文件通常包含处理Web应用程序请求的路由,而api.php文件通常包含处理API请求的路由。定义路由在Laravel中,可以使用Route类定义路由。...我们使用Route::get方法来指定我们想要处理GET请求,我们使用闭包函数来定义我们想要执行的动作。接收参数在Laravel中,可以通过路由接收HTTP请求中的参数。...;});在这个示例中,我们在URI中使用了占位符{ name },这个占位符将匹配URI中的任何字符串,并将其作为参数传递给闭包函数。...重定向在Laravel中,可以使用Route::redirect方法来将一个路由重定向到另一个URI。

    1.6K10

    Laravel框架的核心架构,你懂多少?

    使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?...理论上,生命周期主要有这么些阶段,但其中,开发者大多数只需关注路由、中间件、控制器、闭包函数、逻辑处理等几步 当然,每一步的内部,还是会有更多细化的执行流程,在这里,一般不深入研究框架或改造框架,很少会细化研究...,再调用服务的方法,但使用facade,就可以直接把服务当静态对象来调用了。...对于我们的用户(最上面的用户)想使用laravel框架,必须通过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式...使用契约用注入的方式,这样使用的不好之处是如果一个方法里面使用多个契约的话,我们就得注入多个契约,这样代码看起来不优雅。

    3.3K20
    领券