`
axgle
  • 浏览: 94191 次
  • 性别: 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属于使用层,实现层,也就是最终你坐在了你先前占的位置上,从而真正的实现了对号入座的过程.
最后,请大家不要问我"万一书本被偷了怎么办?"之类的问题,谢谢合作。
分享到:
评论
23 楼 uncutstone 2006-10-30  
yield 讨论得很火热啊。 yield 理解为占位符,我认为太笼统,因此没有意义。因为在程序中,但凡是抽象的东西,按axgle的意思,都可以理解为占位符。

bd7lx 对 robust 翻译为“鲁棒”有很大的意见。 很想听听大家对这个词的看法。

Ruby 中的yield 我翻译为匿名调用。yield  a parameter 翻译为通过匿名调用传递一个参数。
22 楼 roseanne 2006-10-30  
引用
她是想说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!
21 楼 jack 2006-10-30  
axgle 写道
roseanne 写道
引用
我可不在乎


I know, that is the problem.

that is not a problem
"yield是占位符" is my "Mental model",也许它不是实际情况,但它不会影响我对yield的"使用".

例如:一些人认为“电流”是“流动的水”一样,这就是Mental model:电流不是流动的水,但这不影响人们对电视,冰箱等电器的"使用"


从你们上下文的争论来看
roseanne的意思虽然没有说的很清楚,就我的理解,她是想说yield关键字的存在代表着一种开发模型,或者解题思路。而不是一个实际的动作"占位"

axgle:虽然不妨碍使用,不过,还是没有理解透。

roseanne虽然都是从人文角度来讨论yield,总觉得还有什么内容没有说出来,能否再说明的更多些。

20 楼 roseanne 2006-10-30  
引用
“电流”是“流动的水”


It is OK, since they can use the same math model to certain extent.

引用
"yield是占位符"


That is totally opposite in any sense.

Assume we have a traffic problem, it only makes things worse if everybody tries to 占位. However, if most of us tries to yield, then it improves the situation!!!!

This is a mental problem. I will stop right here! I am yielding right now!!!!


Do whatever you like to do and good luck!

Thanks!
19 楼 axgle 2006-10-30  
roseanne 写道
引用
我可不在乎


I know, that is the problem.

that is not a problem
"yield是占位符" is my "Mental model",也许它不是实际情况,但它不会影响我对yield的"使用".

例如:一些人认为“电流”是“流动的水”一样,这就是Mental model:电流不是流动的水,但这不影响人们对电视,冰箱等电器的"使用"
18 楼 roseanne 2006-10-30  
引用
我可不在乎


I know, that is the problem.
17 楼 axgle 2006-10-30  
roseanne 写道
引用
可以理解为“让路”,等价的效果就是"占位"(暗示着等待处理,其他饶道而行)


You made a huge mistake, you don't know what is the subject (主语) of the verb "yield".

It is current thread/code to yield. Block is not the subject of yield!!!!!

yes,Block is not the subject of yield.
"我"把yield当作一本书,一个象征性的符号,然后把它丢在某处代码里.subject is me!
同时yield象征了一个“动作”,它会发出那个动作,但这个动作是在block里实现的。

这是我的"精神模型",它能够很好的指导我的编码,实际英语中是怎么回事情,我可不在乎
16 楼 roseanne 2006-10-30  
Now, I see more value in bd7lx's artcle.

让路 and 占位 reflects totally different mentality, different attitude.

You probably can see which one is better by now.

"以谦卑融让的心让宝石步入正轨"

Wow, I should respect bd7lx more now.

Thanks!



15 楼 roseanne 2006-10-30  
Make yourself clear, who yields to whom???
14 楼 roseanne 2006-10-30  
引用
可以理解为“让路”,等价的效果就是"占位"(暗示着等待处理,其他饶道而行)


You made a huge mistake, you don't know what is the subject (主语) of the verb "yield".

It is current thread/code to yield. Block is not the subject of yield!!!!!
13 楼 axgle 2006-10-30  
roseanne 写道
引用
这是我个人的理解。我说“yield是占位符 ”,是一个"比喻",而不是"翻译".
怎么翻译我不关心(有没有必要翻译我也不关心),我只关心怎么理解容易就怎么理解。


That is fine, but you put your 个人的理解on the public forum and used "yield是占位符" as title, tried to sell your 个人的理解 to others, that is not good!!!!

Sorry! yield不是占位符!!!!!!

Ok,我已把标题修改为“我的理解:yield是占位符”了
12 楼 roseanne 2006-10-30  
引用
这是我个人的理解。我说“yield是占位符 ”,是一个"比喻",而不是"翻译".
怎么翻译我不关心(有没有必要翻译我也不关心),我只关心怎么理解容易就怎么理解。


That is fine, but you put your 个人的理解on the public forum and used "yield是占位符" as title, tried to sell your 个人的理解 to others, that is not good!!!!

Sorry! yield不是占位符!!!!!!
11 楼 axgle 2006-10-30  
roseanne 写道
By the way, "yield" is a verb, not a noun.

yes.
但这并不要紧。yield既可以看作名词,又可以看作动词。
yield看作动词的时候,可以理解为“让路”,等价的效果就是"占位"(暗示着稍后处理,其他饶道继续而行)
yield看作名词的时候,可以理解为“让路牌”,等价的效果就是"占位符"
代码中写yield的时候,它既是名词又是动词,实际体会一下就明白了。三言两语也说不清楚。
10 楼 axgle 2006-10-30  
bd7lx 写道
写过一些东西给人骂过, 不把以前的yield理解在这分享了

但是 yield
叫成站位符, 只能是个人的理解,对一个语言中的词语的联想来帮助个人的记忆

这是我个人的理解。我说“yield是占位符 ”,是一个"比喻",而不是"翻译".
怎么翻译我不关心(有没有必要翻译我也不关心),我只关心怎么理解容易就怎么理解。
9 楼 roseanne 2006-10-30  
Now, I copied the same comments to your thread.
8 楼 roseanne 2006-10-30  
Wow, great article!!!!

Thanks bd7lx!

I did not read it, since I did not know Ruby in June, I started to learn Ruby in late August... 
7 楼 bd7lx 2006-10-30  
http://www.railscn.com/about1130.html

以谦卑融让的心让宝石步入正轨

尽管满身洋气,自在地穿着西装在星巴克畅饮咖啡,但国人思路免不了受到社会心态的熏染。

yield令人困惑,尤其是长期在Java领域中熟悉了面向对象编程的牛人,加上面向过程中善于调度的高手。

在流程的控制中竟然是这样。yield并不是放弃,也不是产出,至少在金山词霸的解释中不能完美解读ruby代码的真正含义。



在国内开车的人不少,你能经常看到这样的标志吗?

在国内有这样的牌子,不过看到的不多,如果你开一圈,把能看到的用数码相机拍下来,数数



为什么在美国到处可见的yield标志,在中国变得稀少呢?

有这个立这个牌子的必要吗?

要受规矩,按着垄沟找豆包吗? 习惯太束缚创造性。

这都是在大街上和论坛,网站上经常看到和听到的。

yield怎么翻译我没有主意仅仅想说的要打破语言和思维的定势,谦虚和礼让是中国传统的美德,别给丢了

6 楼 roseanne 2006-10-30  
By the way, "yield" is a verb, not a noun.
5 楼 roseanne 2006-10-30  
"yield" in everyday life English means 让路。

If you drive, see sign "yield to the ramp", then you prepare to yield to all cars from the ramp.

I think "yield" in Ruby means exact the same. The code yields to the block.

Actually, it means the same in Java Thread code, the current thread yields to other threads.

I don't know what is the best translation in Chinese, but it means the same to me in English.

Straight literal translation "让路" might be easier for us to understand.

Thanks!

4 楼 bd7lx 2006-10-30  
写过一些东西给人骂过, 不把以前的yield理解在这分享了

但是 yield
叫成站位符, 只能是个人的理解,对一个语言中的词语的联想来帮助个人的记忆

中文的翻译者经常两种倾向:

第一学电脑的总是把自己的术语作为区分Geek与菜鸟的标志, 翻译中喜欢生硬的术语, 比如鲁棒

第二卖弄 术语概念 把简单的问题搞得深奥化, 玄乎化



相关推荐

    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