`
axgle
  • 浏览: 94193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

我的理解:yield是占位符

阅读更多
大学里常常发生占位置的现象:头天晚上拿一本书放在课座上,表示位置已经被占了;第二天才来到这个座位上,翻开书正式上课.在这个现象中,“书本”充当了“占位符”的作用。
在Ruby语言中,yield是占位符:先在前面的某部分代码中用yield把位置占着,然后才在后面的某个代码块(block)里真正实现它,从而完成对号入座的过程.
#定义find
def find(dir)
  Dir.entries(dir).each {|f| yield f} #获得dir目录下的文件名列表;对每个文件名,用yield来处理(至于怎么处理,还不知道,占个位置先^_^)
end

#使用find
find(".") do |f| #block开始
  puts f  #用输出文件名这个语句,真正实现了yield的处理(也可以用任何其他语句)
end #block结束

由此可见,yield属于定义层,属于宣告层,也就是在心里说一句:"这个位置不错,我先用书本占了再说!";而block属于使用层,实现层,也就是最终你坐在了你先前占的位置上,从而真正的实现了对号入座的过程.
最后,请大家不要问我"万一书本被偷了怎么办?"之类的问题,谢谢合作。
分享到:
评论
43 楼 uncutstone 2006-11-03  
jack 写道

鲁棒这个翻译,怎么说呢,实在太难明白了点。直接翻译不是不可以,能不能顺口点呀。
鲁棒总是让我想到 “鲁智胜是不是用棒来开架的”之类的。


鲁智胜的棒,这个联想也不错啊,厚重,扎实,和 robust 很接近的。
42 楼 foxty 2006-10-31  
上面那个例子可能还不够恰当。这里是另外一个js的例子:

function test(block)
{
var a =10;
eval(block);
}

test("alert(a)");

我觉得这里就比较接近ruby中yeild意思了,传一个block进去,然后在某一个位置调用它(这个词可能不太恰当),而且这个block的上下文是根据yeild所在的上下文而定的。不相似吗?
41 楼 bd7lx 2006-10-31  
引用
不觉得这个就跟ruby中的yield相似吗?


请解释如何

相似

?
40 楼 foxty 2006-10-31  
先看看这段js代码

function y(str)
{
    alert(str);
}

function test(str, func)
{
    func.call(this, str);  <--不觉得这个就跟ruby中的yield相似吗?
}

test("aa", y);

对这个东西理解即可,何必要咬文嚼字扣定义呢?
(对ruby没有怎么研究,说错了请谅解.)
39 楼 fixopen 2006-10-31  
Yield其实是label的扩展,结构化编程出现之前,我们主要用label和goto来干活,结构化出现以后,这些东西被排斥,C为了实现非局部跳转,实现了setjmp和longjmp,setjmp就是做了一个label,longjmp自然实现goto的能力:)。它们相对于label和goto来说,增加了一个保存context的能力。

yield实现了一个更自然的label定义方式,同时提供jump out的动作,以后可以自然自动的实现jump in。也就是说,它其实是一种对于label和goto更结构化的使用方式。

关于这一切更抽象更灵活的发展,就是所谓的continuation。
38 楼 bd7lx 2006-10-31  


对本站内的操作方式应该是原作者的大学阅览室站位方式:

在blog里作个草稿,先抢个小位置

过两天,转成发布

看看有没有人惦记 发comment

然后就掖藏到论坛里,由于本站的近视眼功能,帖子和其它坛子池子不同, 虽然新来的,可是带着blog的出生证明,坛子会依照排队算法根据blog出生日来确定坛子出现日,并排序, 这就完成了placeholder的初步功能

还有其它的占位功能, 以后细化讨论



上面放了个占位符, 嘿...

这样站位发表的好处,可以规避风险, 隐藏帖子并延长寿命

缺点, 传统论坛的习惯者会不习惯, 他们不知道坛子有多深, 因为新的-对于读者新的帖子不一定在最上面







37 楼 wolfigo 2006-10-30  
去看看java线程中的yield()方法吧,rails中的yield与此原理应该是相通的,都是一个主动放弃占用的道理,只是java中此时把对线程的控制权交给操作系统来轮换,rails不熟悉,不敢妄下结论。
36 楼 bd7lx 2006-10-30  
您的理解太死板了

这在用行动来诠释 "内容"

狭隘的眼界和思想必然玩法单一,也不容易得到交流的快乐
35 楼 jack 2006-10-30  
bd7lx 写道
就差一点,成为精华帖子

有本钱投票的赶快把这个讨论给固化了吧 对鲁棒化

精华帖子也不等于是伟大正确的帖子, 投了,是我有了投票权后民主权利的不近善意的表达



建议你别拉票,这种风气要不得。你可以自己“赞”一个,但是别这样拉票。
34 楼 bd7lx 2006-10-30  
就差一点,成为精华帖子

有本钱投票的赶快把这个讨论给固化了吧 对鲁棒化

精华帖子也不等于是伟大正确的帖子, 投了,是我有了投票权后民主权利的不近善意的表达

33 楼 uncutstone 2006-10-30  
railscn 的大侠们都到这来了。热闹啊。:-)
32 楼 bd7lx 2006-10-30  
老外常常用生活中常用的词来打比方,让计算机领域的术语生活化简单化

我们常会把简单的词翻译的或故意学术化, 用另外一个领域的生僻词来解释现有的词,好像恐怕别人理解快了,自己就丢面子

yield 在 其它英文的ruby 文章中有调用的含义的使用,我们应该承认
咬着xx给xx也不换,是不好的

http://r4rclub.schtuff.com/%E7%AC%AC%E5%85%AB%E7%AB%A0_%E6%8E%A7%E5%88%B6%E6%B5%81

我曾经调查过的yield 在其它语言中使用,请上眼

R4R的书里面讲yield 放在流程的控制中, 与对象的调用不是一回事

在这里猛讨论鲁棒, 不一定可以让yield 也harden 并确定下唯一的译法, 愿意理解成站着茅坑自己不拉屎让别人拉, 或减少个人的火气让老头老太先走,或是申奥的北京大娘用beijingish调动你过马路

都向董彬学习, 认命吧

反正自己理解了就行了关他人什么事










31 楼 roseanne 2006-10-30  
However, funny translation should be allowed too.

"好久不见" translates to "long time no see", this Chinglish is accepted by English community now.
30 楼 cookoo 2006-10-30  
忘了上次在哪里看见讨论x-ray不应该翻译成x光而应该翻译成x射线,因为x-ray不是可见光,还举了紫外线红外线的例子,连光谱都拿出来了。

我的看法是像这种如果大家都在用的,错就错巴,比如以前说只有jue se才是'角色'的正确发音,但是说jiao se的人多也就默认了。

鲁棒性不知道多少人用?音译的词一般是没法的靠字面理解的,和‘幽默’一样,如果用的人多了就不用去细想了。
29 楼 roseanne 2006-10-30  
引用
鲁棒总是让我想到 “鲁智胜是不是用棒来开架的”之类的。


哈哈!Yes, it is a little funny!
28 楼 jack 2006-10-30  
roseanne 写道
引用
她是想说yield关键字的存在代表着一种开发模型,或者解题思路。


No, no, no!

I don't means anything except "yield", 让路, giving other things (thread, block, code, whatever) a chance to do something. That is all...

You guys are way too sophiscated, really. It is just this simple.

Thanks!


haha 误会了。没有想到只是纯粹在讨论翻译问题。 俺就不参与了
ps:
鲁棒这个翻译,怎么说呢,实在太难明白了点。直接翻译不是不可以,能不能顺口点呀。
鲁棒总是让我想到 “鲁智胜是不是用棒来开架的”之类的。
27 楼 roseanne 2006-10-30  
Laser used to translate as 莱塞 or 雷射(Taiwan), now 激光。

I guess they are all OK.
26 楼 roseanne 2006-10-30  
I think twice, that 匿名调用 is not the correct translation. It adds too many meaning to the simple "yield".

I can pass something to whom I am yielding to. However, I am not 调用 anything... actually I don't know what exactly I yield to... and I don't care either.

25 楼 bd7lx 2006-10-30  
玉不琢不成器

想说的是我是初学者,谦虚的人, 虚心可以使人进步

向各位说yield, 你们先来吧,我等等你们讨论的结果

robust 对我们东北人来说, 就是扎实, 对江南文人翻成鲁棒性也可以
不是用在计算机领域一定要鲁棒,说坚固性也不算大逆不道吧

更不要因为学过某个名人的课程或读过某一出名的书,就以为是这个专业的人了,极力口吐象征专业的词汇,其实那个词在英语世界里太普通了, 只是某人翻译过来成了术语, 把它当成geek的语言或geek必定的翻译排斥一切其它的翻译

喜欢当领导的和计算机语言领域的专家好指手画脚, 调用这个,派遣那个, 习惯了北京带红袖标的大妈们调遣, 也可以接受吧, 是自己的主动


24 楼 roseanne 2006-10-30  
robust 翻译为“鲁棒” is the same as 豆腐 translates as "tofu".

Nothing more, nothing less.

However, it is a little funny.

相关推荐

    python基础知识

    - `%x`: 十六进制整数占位符。 ##### 列表 (List) 与元组 (Tuple) - **列表**: 是一种可变序列,可以存放任意类型的对象。列表使用方括号 `[ ]` 包围。 - 获取长度: `len(list)` - 访问最后一个元素: `list[-1]`...

    11_-_Python_keywords.zip_apartkjc_pdf python

    27. `pass`: 空语句,占位符,不做任何事情。 28. `raise`: 抛出一个异常,如`raise ValueError('Error message')`。 29. `return`: 函数返回值,结束函数执行。 30. `True`: 布尔值之一,表示真。 31. `try`: 引入...

    python面试题100道

    - **`%` 操作符**: 更加传统的方式,使用类似于 C 语言中的占位符进行字符串格式化。 - **`.format` 方法**: 更现代且灵活的方法,可以更好地控制格式化字符串。 - **示例**: ```python name = "Alice" age = ...

    python常见面试题1

    空语句,用作占位符或创建空块。 14. **is与==的区别**: is检查两个对象是否是同一个对象,==检查两个对象的值是否相等。 15. **垃圾回收机制**: Python自动管理内存,当对象不再被引用时,会自动回收。 16....

    python的学习和理解-编程技巧1参考.pdf

    早期的`%s`格式化已被`str.format()`所取代,它使用`{}`作为占位符。例如,`s = "this is a sample {} {}".format("hello", "qjj")`。 Python中的交换变量值的方式很直观,如`x, y = y, x`,这一步骤会同时更新`x`...

    python面试常见的25个问题.docx

    - **定义**:Pass是一个空语句,主要用于充当占位符。 - **用途**:在代码中占位,表示此处将来会有代码但目前还未实现。 #### 十三、遍历器 - **定义**:遍历器是一个对象,可以用于遍历容器中的元素。 - **示例*...

    python资料.docx

    - **pass**: 无操作语句,通常用作占位符或分隔符。 6. **数据类型**: - **Number**: 包括整型(int), 浮点型(float), 复数型(complex)和布尔型(bool)。 - **类型转换**: 可以使用`int()`, `float()`, `str()`等...

    Python基础知识点代码练习

    学会使用break和continue来控制循环流程,以及使用pass语句作为占位符。 3. **函数**:Python中的函数通过def关键字定义,可接受参数并返回值。函数可以有默认参数、可变参数(*args和**kwargs)以及关键字参数。...

    Python100经典练习题.docx

    - pass语句表示空操作,通常用作占位符。 4. **函数**: - 定义函数使用def关键字,返回值通过return语句。 - 参数传递可以是位置参数、关键字参数、默认参数和可变参数。 - lambda表达式用于创建匿名函数。 -...

    c02_2.pdf

    25. **pass**: 空语句,不做任何事情,通常用于占位或创建占位符。 26. **raise**: 主动抛出一个异常,通常在检测到错误或特定条件时使用。 27. **return**: 从函数中返回值,没有`return`的函数默认返回`None`。 ...

    2021-2022计算机二级等级考试试题及答案No.18662.docx

    - **知识点**:在PowerPoint 2003中,幻灯片母版中通常包含5-6个占位符,用于放置标题、文本、图片等内容。备注母版则包含较少的占位符,通常不超过5个。 #### 18. 字符串的属性检查 - **知识点**:在Python中,...

    laravel4手册

    - `@yield` 用于在父模板定义占位符,子模板通过 `@section` 和 `@endsection` 填充内容。 7. **模型(Models)** - 模型代表数据库中的表,可以通过 Eloquent ORM 进行操作。 - 使用 `protected $fillable` 或 ...

    python面试题及答案.txt

    `%s`是字符串格式化的一个占位符,用于指定一个位置,该位置上的值将会被转换为字符串形式插入到字符串中。这是一种早期的字符串格式化方式,在现代Python中更推荐使用`format()`方法或f-string。 ### Python函数...

    python cookbook 3

    - `str.format()` 方法用于格式化字符串,支持占位符。 - 正则表达式模块 `re` 提供了强大的文本匹配和替换功能。 10. **并发与异步编程**: - `threading` 和 `multiprocessing` 模块用于多线程和多进程编程。 ...

    ScalaVsErlang.pptx

    而在 Scala 中,列表推导可以通过 `for` 循环和 `yield` 关键字来完成,或者使用 `map` 函数配合匿名函数或占位符 `_` 来实现相同功能。 2. 模式匹配:Erlang 使用 `case` 语句进行模式匹配,可以检查类型并进行...

    Secrets of the JavaScript Ninja 2nd 第2版 pdf 0分

    Promise是对计算结果的占位符,保证最终会知道某个计算的结果。Promise可以成功解决(resolve)或失败(reject),一旦状态确定,就不会再更改。创建新的Promise对象,需要提供一个解决和拒绝的函数,例如`new ...

    Laravel开发-view

    使用 `@extends` 指令指定父视图,然后用 `@section` 定义内容区域,用 `@yield` 在父视图中定义占位符,子视图内容将被插入到这里。 3. **视图组件**:视图组件是可重用的视图片段,有助于实现代码复用和组织。...

    Python教程

    - **pass语法**:空语句,起到占位符的作用。 2. **函数定义** - **定义函数**:使用`def`关键字定义函数。 - **函数参数**: - **定义参数变量**:可以接收任意数量的位置参数。 - **参数关键字**:根据...

    c#函數實用手冊代碼

    - 形式参数:在函数声明中使用的占位符,用于接收实际传递的值。 - 实际参数:在调用函数时传递的值,与形式参数相对应。 - 参数可以是值类型(如int、bool)或引用类型(如object、string)。 4. **方法重载...

    TP5 视图和模板

    视图文件不包含业务逻辑,只包含HTML代码以及用于渲染数据的占位符。 **二、模板引擎** TP5采用Blade模板引擎,它允许开发者使用简洁的语法来组织和控制视图的结构。Blade支持条件语句、循环、部分视图、包含、...

Global site tag (gtag.js) - Google Analytics