块代码编程---开始使用块代码

3、机器人编程:DISPLAY 块的使用与探索 本博客介绍了在SPOT机器人上使用NXT软件中的DISPLAY块进行编程的基础知识,包括如何显示文本、图像和绘图,并探讨了DISPLAY块的多种配置选项及与其他编程块的结合应用。通过创建'Hello World!'程序以及动态显示案例,帮助读者掌握基本的LCD屏幕操作技巧,为后续更复杂的机器人交互设计打下基础。 阅读详情

本文档版权归NickTang所有,没有本人书面或电子邮件允许,不许转载,摘录,发表。多谢!


本章的几节使用例子代码来开始块代码的学习。

定义和使用块代码

插入符^有两个作用,一个是声明一个块代码变量,另一个是开始一个块代码的定义。块代码的代码部分是包含在一对大括号中的,就像下面演示的这样(使用C语言风格的分号;作为块代码行的结束):

int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};

下图是对块代码的详细演示:

image: ../Art/blocks.jpg

主义块代码中可以使用和它有同一个生存域的变量的。

如果你声明了一个块代码变量,你可以在后面像使用函数一样使用它:

int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};
 
printf("%d", myBlock(3));
// prints "21"

直接使用块代码

很多情况下,你不需要声明块代码变量,你把一个块代码直接做内联实现,然后作为函数参数传入函数。下面的例子使用函数qsort_b。qsort_b和函数qsort_r很像,不过它使用一个块代码作为参数。

char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" };
 
qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) {
    char *left = *(char **)l;
    char *right = *(char **)r;
    return strncmp(left, right, 1);
});
 
// myCharacters is now { "Charles Condomine", "George", "TomJohn" }

Cocoa中的块代码

Cocoa框架中有不少函数是使用块代码作为参数的,特别是在容器类中的包含对象的操作,或者一个操作完成后的回调函数。下面的例子演示了在NSArray类中的sortedArrayUsingComparator:函数中使用块代码,这个函数仅有一个参数,就是这个块代码,为了演示,块代码被声明为NSComparator类型的本地变量:

NSArray *stringsArray = [NSArray arrayWithObjects:
                                 @"string 1",
                                 @"String 21",
                                 @"string 12",
                                 @"String 11",
                                 @"String 02", nil];
 
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |
        NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];
 
NSComparator finderSortBlock = ^(id string1, id string2) {
 
    NSRange string1Range = NSMakeRange(0, [string1 length]);
    return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
};
 
NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock];
NSLog(@"finderSortArray: %@", finderSortArray);
 
/*
Output:
finderSortArray: (
    "string 1",
    "String 02",
    "String 11",
    "string 12",
    "String 21"
)
*/

__block类型变量

块代码的一个更强力的功能是可以修改具有同一可视周期的变量。当然你必须使用__block来修饰这个变量。考虑上节中的例子,如果我们需要使用一个变量来做一个统计,就像下例一样。这里的currentLocale变量对于代码块内部而言就是只读的。

NSArray *stringsArray = [NSArray arrayWithObjects:
                         @"string 1",
                         @"String 21", // <-
                         @"string 12",
                         @"String 11",
                         @"Strîng 21", // <-
                         @"Striñg 21", // <-
                         @"String 02", nil];
 
NSLocale *currentLocale = [NSLocale currentLocale];
__block NSUInteger orderedSameCount = 0;
 
NSArray *diacriticInsensitiveSortArray = [stringsArray sortedArrayUsingComparator:^(id string1, id string2) {
 
    NSRange string1Range = NSMakeRange(0, [string1 length]);
    NSComparisonResult comparisonResult = [string1 compare:string2 options:NSDiacriticInsensitiveSearch range:string1Range locale:currentLocale];
 
    if (comparisonResult == NSOrderedSame) {
        orderedSameCount++;
    }
    return comparisonResult;
}];
 
NSLog(@"diacriticInsensitiveSortArray: %@", diacriticInsensitiveSortArray);
NSLog(@"orderedSameCount: %d", orderedSameCount);
 
/*
Output:
 
diacriticInsensitiveSortArray: (
    "String 02",
    "string 1",
    "String 11",
    "string 12",
    "String 21",
    "Str\U00eeng 21",
    "Stri\U00f1g 21"
)
orderedSameCount: 2
*/

这个内容在“Blocks and Variables”中有更多细节描述。

sogo:搜狗h5页面源码分析 去啊 搜狗h5页面源码分析 立即下载

相关推荐

3D Slicer隐藏技巧:这样玩转医学影像分割与3D建模(含DICOM处理)

本文深入探讨3D Slicer在医学影像分割与3D建模中的高级应用技巧,包括多模态分割策略、三维可视化优化及DICOM数据处理。通过专业配置和Python脚本示例,帮助医疗AI开发者和影像科医师提升工作效率,实现精准的医学图像分析与建模。

weixin_28559803的博客 433

代码块

代码块 什么是代码块 代码块又称为初始化块,属于类中的成员(是类的一部分)类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来。 但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式的调用,而是在加载类时,或创建对象时隐式的调用。 基本语法 [修饰符] { 代码; }; 注意: 修饰符可写可不写,要写的话,只能写static 代码块分为两类,使用static修饰的是静态代码块,没有static修饰的是普通代码块。 ;号可写可不写 逻辑语句可以为任何逻辑语句 代码块的

yaolong 2746

从KVM虚拟化到Openstack云化架构综述

目录 摘要 OpenStack的虚拟化技术 OpenStack架构介绍 Nova Swift KeyStone Neutron Glance Cinder Ceilometer Heat 摘要 这两年的工作中,接触到公有云和私有云的项目还不少。起初对于Openstack的了解,仅停留在其几大组件的交互上,如Nova、Neutron、Glance等,以及对各大云厂商功能点上...

liyunpeng229的博客 2051

块代码实用入门指南

本文档版权归NickTang所有,没有本人书面或电子邮件允许,不许转载,摘录,发表。多谢! 一段时间以来,块代码已经成为Ruby,Python,Lisp等脚本语言和编译语言中的一部分(在这些语言中,可能被命名为“closures”或“lambdas”)。从Mac OS X v10.6和iOS 4.0开始,块代码,一个强大的C语言功能点,已经是Cocoa应用开发的一部分了。虽它的语法初...

sogotobj 259

海康摄像头V3.4 升级改造VUE3

摘要:本文介绍了一个基于Vue3的海康威视摄像头组件封装方案。针对官方仅提供HTML版本SDK的问题,作者通过封装实现了Vue3组件化集成,解决了iframe/webview引入方式的弊端。组件核心功能包括实时预览、本地录像、录像下载、截图抓拍等,并优化了SDK初始化逻辑(单例模式)、定位问题修复和错误处理机制。关键技术点包括:1)SDK插件容器定位修复;2)录像下载进度监控;3)多格式图片数据处理;4)多窗口场景下的SDK实例管理。该组件可直接通过npm安装使用,提供了完善的API和事件接口,显著提升了海

LINLINLINShi的博客 113

世界模型和大语言模型结合开发自动驾驶算法

摘要:自动驾驶系统开发中,融合世界模型和大语言模型可显著提升效率和安全性。世界模型负责环境感知与预测(如目标检测、轨迹预测),而大语言模型优化代码生成、决策解释等环节。实施路径包括需求分析(1-2周)、模型开发(2-4个月)、模拟测试(1-2个月)、实车测试(2-3个月)和合规优化(1-2个月),总周期6-12个月。关键技术工具包括PyTorch/TensorFlow、CARLA模拟器和ROS系统,核心设计理念强调模块化、安全优先和敏捷迭代。示例代码展示了YOLO目标检测与大语言模型决策建议的集成方案。该方

ponygame的博客 826

块编程指南 blocks

分类:iPhone开发2011-05-26 13:32阅读(325)评论(0)收藏举报 ——译自Apple Reference Library《Blocks Programming Topic》 简介 块对象是C语言的句法和运行时特性。它类似于标准C函数,但可以将代码、变量绑定到堆(heap)、栈(stack)。一个块还维护了一系列的状态,这些状态或数据影响着执行的结果。 可以把块组成...

renzhelife 366

微信图片.dat文件解密实战:用Python一键转PNG(附完整代码)

本文详细介绍了如何通过Python解密微信图片.dat文件并转换为PNG格式的完整教程。文章深入解析了微信.dat文件的异或加密原理,提供了自动检测密钥的Python脚本,并分享了批量解密和性能优化的实用技巧,帮助用户轻松恢复和整理微信聊天图片。

weixin_29096377的博客 464

块代码编程---声明和创建块代码

声明一个块代码的引用 块代码变量用来保存到块代码的引用。使用和声明函数指针相识的语法声明块代码变量,只是把其中的*换成占位符^。块代码类型基本上都是C语言的格式。下面就是一些有效的块代码变量声明: void (^blockReturningVoidWithVoidArgument)(void); int (^blockReturningIntWithInt...

sogotobj 264

考完CAIE认证一年后,谈谈它对我的职业的真实影响(干货)

大门,让面试官愿意给你机会,但进门之后的发展,还得靠持续的学习和项目积累。说实话,当时的心态是“考都考了,总比闲着强”,对这张证书能带来什么实际价值,心里并没有底。这种广泛的生态认可,让这张证书的“流通性”变得很强——无论跳槽还是在原公司发展,它都是一个被市场验证过的能力证明。对我个人而言,虽然没跳槽,但在年度调薪和争取内部项目时,持证经历也成了一个有力的“加分项”。这种巨大的薪资差距,恰恰反映了市场对“能落地、懂技术”的深度人才的渴求。考完证后的这一年,我看到了两条清晰的职业发展路径在自己面前展开。

qq_16014487的博客 815

把云端打印带回办公室:通信场景 SAP_COM_0466 打通 SAP BTP ABAP environment 与本地打印机的 Pull Integration 实战

摘要: 本文探讨云端SAP系统如何通过SAP_COM_0466通信场景实现与本地打印机的安全连接。核心方案采用Pull Integration模式,由本地组件(如SAP Cloud Print Manager或第三方OMS)主动从云端打印队列拉取任务,避免网络边界冲突。配置流程涵盖通信安排创建、打印队列绑定及权限管理,并强调队列类型必须选择"Pull Integration Queue"的关键细节。方案通过分离云端生产与本地打印环节,既保障安全性又便于运维监控,适用于SAP BTP AB

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

西门子博图编程:PLC编程规范

PC在编码规范方面比PLC要好很多。既然它们都是编程语言,那么PC方面的规范是否可以用与PLC呢?答案是肯定的,但需要作取舍。下面规范中的大部分可以用于一般PLC,其中有些只是针对西门子博途,使用时需注意。 变量命名 目前PLC中的变量命名没有统一的规则,这方面我们可以参考PC编程,在PC的编程中有如下规则: camelCase,又叫骆驼命名法,变量中第一单词首字母小写,后面单词的首字母大写,就像camelCase名称一样。Java、C++等高级语言中普遍使用。 snake_case,又叫蛇蛇命名法

9292

Exploring Automated Distractor Generation for Math Multiple-choice Questions via Large Language Mode

多项选择题(MCQ)在几乎所有级别的教育中都无处不在,因为它们易于管理、评分,并且是评估和实践中可靠的格式。MCQ最重要的方面之一是干扰因素,即旨在针对真实学生常见错误或误解的不正确选项。迄今为止,对于教师和学习内容设计师来说,制作高质量的干扰物的任务在很大程度上仍然是一个劳动和时间密集型的过程,其可扩展性有限。在这项工作中,我们研究了数学MCQ领域的自动干扰物生成任务,并探索了从上下文学习到微调的各种基于大型语言模型(LLM)的方法。

c_cpp_csharp的专栏 317

块编程指南

——译自Apple Reference Library《Blocks Programming Topic》 简介 块对象是C语言的句法和运行时特性。它类似于标准C函数,但可以将代码、变量绑定到堆(heap)、栈(stack)。一个块还维护了一系列的状态,这些状态或数据影响着执行的结果。 可以把块组成函数表达式,用于传递给API,或者使用在多线程里。最有用的是回调,因为块在回调时能把代

huilibai的专栏 628

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

从零开始使用Python编程DJI Tello

从零开始使用Python编程DJI Tello 从一台未安装python环境的电脑 -->用python编程无人机,其实一点也不复杂。步骤为以下几点: 安装python以及Python IDLE的基础操作 阅读无人机的相关sdk 安装无人机相关库 接下来就是写代码编程啦 一:安装python(这里以win作为案例) 1.下载安装包:在Python的官网 www.python.org 中找到最新版本的Python安装包,点击进行下载,请注意,当你的电脑是32位的机器,请选择32位的安装包,如果是64位

qq_45873528的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从0开始深度学习(18)——层和块

将输入数据作为其前向传播函数的参数。通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。存储和访问前向传播计算所需的参数。根据需要初始化模型参数。在下面的代码片段中,我们从零开始编写一个块。它包含一个多层感知机,其具有256个隐藏单元的隐藏层和一个10维输出层。自定义的MLP 类继承自 nn.Module。

立志成为炼丹师? 1519

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Ruby块编程核心技巧】:掌握5种高阶用法让你代码效率提升300%

掌握Ruby块用法,提升代码简洁性与执行效率。本文详解5种高阶应用场景,包括迭代器、回调处理、资源管理等核心技巧,助你写出更优雅的Ruby代码。实用方法全覆盖,值得收藏。

QuickProceed的博客 696

Music Blocks开发者指南:如何创建自定义音乐编程块

Music Blocks是一款创新的音乐编程教育工具,它让用户能够通过可视化编程块来创作音乐。本文将为您提供完整的开发者指南,教您如何创建自定义音乐编程块,扩展Music Blocks的功能。 ## 什么是Music Blocks? Music Blocks是一个音乐微世界,它将编程概念与音乐创作相结合。通过拖放编程块,用户可以创建复杂的音乐作品,同时学习编程逻辑和音乐理论。这个开源项目采用可

gitblog_00575的博客 739
上一篇: 块代码实用入门指南
下一篇: 块代码编程---声明和创建块代码
NickTang
博客等级 码龄24年 261粉丝 49原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值