Code blocks

2024-06-02 05:58
文章标签 code blocks

本文主要是介绍Code blocks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Code blocks是Ruby特有的很强大的特点。

可以通过这个实现回调

对比

  • Java的匿名内部类更加简单。
  • 比C语言的指针简单。

两种写作形式

{puts "hello"}

以及:

doclub.enroll(person)person.socialize
end

比较好的规范是:单行用第一种,多行代码用第二种。

使用方式

在函数调用后面写:

greet {puts "Hi"}

其中greet是函数名,如果该函数有参数,那么参数要出现在代码块(code block)前面。
Ruby中函数没有参数,可以省略括号。

如:

greet("Dave","loyal customer") {puts "Hi"}

这种形式好像就是函数定义了,但注意这里是在Ruby,函数定义不同于C语言或者Java语言。

上面只是说明code blocks放置的位置,其实并没有调用块中的内容。

调用code blocks

学习一个关键字:yield

def call_backputs "Start of method"yieldyieldputs "End of method"
endcall_block { puts "In the block"}

这样一调用函数,在内部有两个声音在喊,调用后面的code block!因为共有两个声音(yield),所以调用两次。

输出结果是:

Start of method
In the block
In the block
End of method

yield什么

上面的例子中,yield只是喊,但是并没有喊出独特的声音来。既然有这样的发声通道,是不是可以定制化地喊出自己的声音呢?

答案是可以的:为yield提供参数

def who_says_whatyield("Dave","hello") #通过yield喊出自己的声音yield("Andy","goodbye")
endwho_says_what {|person,phase| puts "#{person} says #{phase}"}

通过在yield中定制参数,参数值将会被传递到code block中。
但是code block如何接过来,需要一定的格式。

不同于函数,code block接参数的方式是在两个竖线内。关于这点,有一个很有趣的说明:

有些人认为,这种传递就像是函数传递参数。这样的理解有一定道理,但也并非“全部的故事”。最好将这种方式看作是”coroutine”,运行时控制权在二者之间来回转换。

结合数组一起服用

animals = %w{ ant bee cat dog} #构造一个数组
animals.each {|animal| puts animal}  #array.each是个函数,后面跟的是code block
#输出:
ant
bee
cat 
dog

虽然没有看底层源码,但也可以想到each函数中有yield,否则不会调用后面的code block。

开吃一些语法糖

['cat', 'dog','horse'].each {|name| print name, " "}
5.times { print "*"}
3.upto(6) {|i| print i}
('a'..'e').each {|char| print char}
puts
#输出
cat dog horse *****3456abcde

注意数字是对象,对象必然自带了一些函数

这篇关于Code blocks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023163

相关文章

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

Behind the Code:与 Rakic 和 Todorovic 对话 OriginTrail 如何实现 AI 去中心化

原文:https://www.youtube.com/watch?v=ZMuLyLCtE3s&list=PLtyd7v_I7PGnko80O0LCwQQsvhwAMu9cv&index=12 作者:The Kusamarian 编译:OneBlock+ 随着人工智能技术的飞速发展,一系列前所未有的挑战随之而来:模型的衰退与互联网的潜在威胁愈发明显。AI 的增长曲线可能因训练过程中的瓶颈而趋于平

冒泡排序和鸡尾酒排序(code)

昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一、冒泡排序 # 冒泡排序class BubbleSort(object):def __init__(self, data_list):self.data_list = data_listself.length = len(data_list)# 简单粗暴的排序方式def b_sort(self):d

编译时出现错误 -- clang: error: linker command failed with exit code 1 (use -v to see invocation)

出现这个错误的原因有多种,常见的是因为某些文件的缺失或者是文件的重复导致的。 这类错误查看的关键在于其上一行的文字。 对于文件缺少而导致错误的情况: 例如上图中的示例,其上一行文字为 ld:library not found for -lrxl,可以看出是缺失了某一文件而导致的错误,这行文字中的最后“ -lrxl ”:-l 代表着其前缀是“lib”,连着后面的 rxl,其名称为 libr

GCDAsyncUdpSocket 使用时出现错误 Domain=NSPOSIXErrorDomain Code=13 Permission denied

完整的错误描述为: Domain=NSPOSIXErrorDomain Code=13 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied, NSLocalizedFailureReason=Error in send() function.} 原始代码是这样的: clientBroadcast