yandongdiy3300 2009-09-09 18:59
浏览 234
已采纳

upcase!方法是如何将原字符串改变的?通过类似指针传递吗?

irb(main):069:0> a="string"
=> "string"
irb(main):070:0> a.object_id
=> 113672970
irb(main):071:0> a.upcase.object_id
=> 113665130
irb(main):072:0> a.upcase!
=> "STRING"
irb(main):073:0> a.object_id
=> 113672970
irb(main):074:0>
[b]问题补充:[/b]
require 'find'

def find_all_png(dir)

files = []

Find.find(dir) do |path|

if File.extname(path) =~ /.png/i && File.file?(path)

yield path if block_given?

files << path

end

end

files

end
find_all_png('.') {|path| puts path },如程序,关联block传递给函数find_all_png,函数内有一个内层block,内层block的yield取{|path| puts path },并执行这个block吗?

  • 写回答

2条回答 默认 最新

  • rednaxelafx 2009-09-14 22:02
    关注

    跟下面的代码是同类型吧:
    [code="irb"]irb(main):001:0> def foo
    irb(main):002:1> [1, 2, 3].each do |i|
    irb(main):003:2* yield i if block_given?
    irb(main):004:2> end
    irb(main):005:1> end
    => nil
    irb(main):006:0> foo {|i| p i }
    1
    2
    3
    => [1, 2, 3][/code]
    yield无论在嵌套多深的地方,都是调用其所在的具名方法的关联block。要注意的是如果一个具名方法包含递归调用的话,关联block是不会跟到递归调用里去的,要显式传递block。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料