编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   

 Wiki.Wiki.   博客博客   搜索搜索   图灵图灵   聊天室  成员成员 
 提示:用索引迭代
指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 可打印的版本下载主题利率主题订阅本主题私人信息 刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期二,2005年7:42下午7:42  帖子主题:提示:迭代索引

让我们说我们希望迭代数组并打印出每个元素。这很容易。

代码:
Foo = ["hello", "world", "foo", "bar"]

Foo.each do |item|
   puts item
结尾


但是,如果您想迭代索引号,例如,那么什么,所以你得到以下内容:

代码:
你好
2.世界
3. foo
4. bar


你可能很想写一些这样的东西:

代码:
Foo = ["hello", "world", "foo", "bar"]
索引= 1

Foo.each do |item|
   puts "#{index}. #{item}"
   index += 1
结尾


但是,使用块是一种更简单的方法。

代码:
Foo = ["hello", "world", "foo", "bar"]

Foo.each_with_index do |项目,索引|
   puts "#{index + 1}。 #{物品}"
结尾
赞助
赞助
赞助
赞助
塞万提斯




邮政发布: 2005年7月13日星期三早上7:00  帖子主题:(没有主题)

WTD的好的提示! 很高兴
这让我思考,“Ruby有过载吗?”不得不改变会很好 每个每个_with_index.,而是仅为块添加新参数(?)。
或者,Ruby有过载,不是在块的时候?
WTD.




邮政发布: 2005年7月13日星期三下午1:19  帖子主题:(没有主题)

塞万提斯写道:
WTD的好的提示! 很高兴
这让我思考,“Ruby有过载吗?”不得不改变会很好 每个每个_with_index.,而是仅为块添加新参数(?)。
或者,Ruby有过载,不是在块的时候?


红宝石在方法名称上根本没有重载。例如,你不能拥有:

代码:
课堂foo
   def bar
      "bar"
   end
   def bar(baz)
      baz
   end
结尾


但是,肯定有一个实例,您可以在其中使用或没有块进行方法工作。

使用块的最常用方式是简单地从方法内产生值到块。

代码:
课堂foo
   def each
      for x in ["hello", "world", "foo", "bar"]
         yield x
      end
   end
结尾


例如,我们可以简单:

代码:
Foo.new.each {| x |把x}


但在这种情况下,我们真的不知道块返回的值是值。我们需要这个,我们将如何获得该价值?

我们需要它在类别,收集,拒绝和选择方法等地方。

要完成此操作,我们需要将块作为参数明确地传递给方法。我们可以这样做,因为块只是一个物体 class.

所以让我们写一个基本的收集方法。

代码:
课堂foo
   def each
      for x in ["hello", "world", "foo", "bar"]
         yield x
      end
   end

   def collect(&block)
      # some code
   end
结尾


在这里,我们创建了方法,并将块作为参数指定。注意&符。截至目,它没有任何东西。

代码:
课堂foo
   def initialize
      @a = ["hello", "world", "foo", "bar"]
   end

   def each
      for x in @a
         yield x
      end
   end

   def collect(&block)
      for x in @a
         # some code
      end
   end
结尾


仍然,它没有做任何事情,但我们又有一个循环在数组上。我们如何使用当前数组项称为参数的块?

代码:
课堂foo
   def initialize
      @a = ["hello", "world", "foo", "bar"]
   end

   def each
      for x in @a
         yield x
      end
   end

   def collect(&block)
      for x in @a
         block.call(x)
         # or: block[x]
      end
   end
结尾


然而,它缺少一些东西。我们没有在任何地方累积答案。

代码:
课堂foo
   def initialize
      @a = ["hello", "world", "foo", "bar"]
   end

   def each
      for x in @a
         yield x
      end
   end

   def collect(&block)
      new_arr = []
      for x in @a
         new_arr.push(block.call(x))
      end
      new_arr
   end
结尾


仍然存在问题。如果我在没有块的情况下怎么办?

在这种情况下,块将设置为nil,我们可以测试。

代码:
课堂foo
   def initialize
      @a = ["hello", "world", "foo", "bar"]
   end

   def each
      for x in @a
         yield x
      end
   end

   def collect(&block)
      if block.nil?
         @a
      else
         new_arr = []
         for x in @a
            new_arr.push(block.call(x))
         end
         new_arr
      end
   end
结尾


现在它的工作原理是:

代码:
foo.new.colect.


或者:

代码:
Foo.new.colect {| x | X.upcase}
塞万提斯




邮政发布: 2005年7月13日星期三:下午9:46  帖子主题:(没有主题)

感谢对块的解释,WTD。 很高兴

我对循环感到好奇:
代码:

      for x in @a
         block.call(x)
         # or: block[x]
      end

我可以看到我们通过@A中的每个元素迭代,但它究竟是如何运作的?我假设X是一个整数,范围为0到3,而不是字符串(Hello,World,Foo和Bar)。但随后,似乎与您的最后一行代码匹配:
代码:
Foo.new.colect {| x | X.upcase}

X必须是要调用UPCASE方法的字符串。

因此,您的循环迭代四次,x的值是数组的特定元素。如果我扣除我的扣除,那就是整洁的。 微笑

/我加载IRB

......

哦,那是甜蜜的。 很高兴

我只是在检查出来 红宝石图书馆参考 并注意到 每个_with_index. 被列为“mixin”。它似乎也是令人令人愉快的。 思维
WTD.




邮政发布: 2005年7月13日星期三10:12 PM  帖子主题:(没有主题)

塞万提斯写道:
我对循环感到好奇:
代码:

      for x in @a
         block.call(x)
         # or: block[x]
      end

我可以看到我们通过@A中的每个元素迭代,但它究竟是如何运作的?我假设X是一个整数,范围为0到3,而不是字符串(Hello,World,Foo和Bar)。


不,“x”实际上是数组中的每个项目,而不是索引。

塞万提斯写道:
因此,您的循环迭代四次,x的值是数组的特定元素。如果我扣除我的扣除,那就是整洁的。 微笑


正确的。

塞万提斯写道:
我只是在检查出来 红宝石图书馆参考 并注意到 每个_with_index. 被列为“mixin”。它似乎也是令人令人愉快的。 思维


首先,定义每个。

代码:
班级酒吧
   def each
      for x in 1 .. 4
         yield x
      end
   end
结尾


现在你可以显然做一些毫无意义的事情:

代码:
酒吧.new.each { |x| puts x }


现在,混合枚举。

代码:
班级酒吧
   include Enumerable
结尾


现在,尝试:

代码:
酒吧.new.each_with_index { |x, i| puts "#{i}. #{x}" }


或令人愉快的任何其他方法。

混合的关键是理解我们在以前的工作中建立。如果我们有一堆方法,例如,所有构建在“每个”上,例如,并不需要其他,我们可以将它们放在可能看起来像的模块中:

代码:
模块枚定
   def each_with_index
      count = 0
      each do |x|
         yield x, count
         count += 1
      end
   end

   # ...
结尾


然后,我们可以简单地将其包含在定义“每个”的类中,并获得一吨“免费”功能。
塞万提斯




邮政发布: 2005年7月14日星期四7:51  帖子主题:(没有主题)

再次感谢,WTD。 很高兴
我现在明白了这一点。我喜欢如何包括令人令人逗留模块的那个片段;看到为您制作的方法的代码总是很好。
WTD.




邮政发布: 星期四,2005年7月14日下午4:38  帖子主题:(没有主题)

塞万提斯写道:
再次感谢,WTD。 很高兴
我现在明白了这一点。我喜欢如何包括令人令人逗留模块的那个片段;看到为您制作的方法的代码总是很好。


请记住,我很肯定令人愉快是用C. 微笑

我展示了你的近似。

当然,您可以通过创建自己的混合来了解这是如何工作的。

代码:
$ IRB.
IRB.(main):001:0> module Nonsense
IRB.(main):002:1>    def each_with_rand
IRB.(main):003:2>       each do |item|
IRB.(main):004:3*          yield item, rand
IRB.(main):005:3>       end
IRB.(main):006:2>    end
IRB.(main):007:1> end
=> nil
IRB.(main):008:0> class Baz
IRB.(main):009:1>    def initialize
IRB.(main):010:2>       @my_array = ["wooble", "ninja", "gah"]
IRB.(main):011:2>    end
IRB.(main):012:1>
IRB.(main):013:1*    def each
IRB.(main):014:2>       @ my_array.each {|物品|收益件项目}
IRB.(main):015:2>    end
IRB.(main):016:1>
IRB.(main):017:1*    include Nonsense
IRB.(main):018:1> end
=> Baz
IRB.(main):019:0>baz.new.each_with_rand do |项目,random_number |
IRB.(main):020:1*    puts "#{item},#{random_number}"
IRB.(main):021:1> end
求爱, 0.724940566811711
忍者, 0.0597663172520697
g, 0.0826400963123888
=> ["wooble", "ninja", "gah"]
IRB.(main):022:0>
塞万提斯




邮政发布: 星期五,2005年7月15日上午6:55  帖子主题:(没有主题)

感谢您对每个仪器的富有洞察力的回复。我了解一切,除了我有点不清楚包括包括的工作。
我假设包括像复制和粘贴一切一样的行为 里面 包含线路的模块是。如果要复制模块本身,您必须像这样调用它,
代码:

Baz..new.nonsense.ach_with_rand.

正确的?

再次感谢,WTD!
赞助
赞助
赞助
赞助
WTD.




邮政发布: 星期五,2005年7月15日2:07 PM  帖子主题:(没有主题)

塞万提斯写道:
我假设包括像复制和粘贴一切一样的行为 里面 包含线路的模块是。如果要复制模块本身,您必须像这样调用它


如果要将模块复制并粘贴到类中,则会访问模块:

代码:
Baz.::Nonsense


但是您将无法以这种方式访问​​每个_with_rand方法。

代码:
IRB.(main):026:0> class Foo
IRB.(main):027:1>    module Bar
IRB.(main):028:2>       def baz
IRB.(main):029:3>          "Hello world"
IRB.(main):030:3>       end
IRB.(main):031:2>    end
IRB.(main):032:1> end
=> nil
IRB.(main):033:0> Foo::Bar
=> Foo::Bar
IRB.(main):034:0> Foo::Bar.baz
Nomethoderror.:未定义的方法`baz'for foo::Bar:Module
        from (irb):34
        from :0
IRB.(main):035:0> class Foo
IRB.(main):036:1>    include Bar
IRB.(main):037:1> end
=> Foo
IRB.(main):038:0> Foo.new.baz
=> "Hello world"
IRB.(main):039:0>


所以,你看到的,包括一个比只是复制和粘贴更微妙。 微笑
卡希尔




邮政发布: 太阳04,2005 8:15 AM  帖子主题:(没有主题)

什么是http代理服务器?
HTTP代理服务器是一个代理,允许使用HTTP和(并不总是)FTP协议在Internet上工作。它可以执行从Internet上下载的信息的缓存.Now HTTP代理服务器是最普遍的。他们的支持(使用它们的能力)包含在许多程序中:浏览器,下载管理器等。但是,他们的支持在操作系统的级别上没有实现?要使用它们,您应该以适当的方式配置所有程序,该程序应使用代理。 HTTP代理服务器具有多个匿名级别。

http://www.checkproxy.net
从上一个显示帖子:   
   指数 -> 编程,Ruby. -> 红宝石教程
查看上一个主题 告诉一个朋友可打印的版本下载主题利率主题订阅本主题私人信息 刷新页面 查看下一个主题

11  [ 10 Posts ]
跳到:   


Style:  
搜索: