Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #3225

Re: To Yield or Not to Yield: An Inferable Question

From Brian Candler <b.candler@pobox.com>
Newsgroups comp.lang.ruby
Subject Re: To Yield or Not to Yield: An Inferable Question
Date 2011-04-20 03:59 -0500
Organization Service de news de lacave.net
Message-ID <157ee9d8e95b68bee86be7ba51ba49f1@ruby-forum.com> (permalink)
References <CA1B8DEB-7979-4D1B-8594-3BA3C72AE76F@carboni.ca> <c0656e03bb64f14a6b7f3ac7a3ab69e5@ruby-forum.com> <78681B86-AB88-4DA6-A8AA-EEA59186B407@carboni.ca>

Show all headers | View raw


Michael Edgar wrote in post #993395:
> If one peruses the Ruby standard library, one will find that just in the
> Ruby
> code alone, block_given? occurs 265 times, in *every single case* is
> used
> to execute yield conditionally, and in every single case, the result is
> used
> only as a simple constant. [4]

However there are some cases where this is done unnecessarily, 
net/telnet.rb being the prime example. e.g.

      if block_given?
        waitfor({"Prompt" => match, "Timeout" => time_out}){|c| yield c 
}
      else
        waitfor({"Prompt" => match, "Timeout" => time_out})
      end

could have been written simply as:

      waitfor({"Prompt" => match, "Timeout" => time_out}, &blk)

Net::Telnet also has a load of conditionals because it lets you pass an 
optional block to each call for capturing debug information - an awkward 
API to use, because often you end up passing the same block every time. 
It would have been much easier to pass this in the options hash where it 
could have been set as a default.

e.g.

  t = Net::Telnet.new("Debug" => lambda { |c| print c }, ...)
  t.cmd("foo")
  t.cmd("bar")
  t.cmd("baz")

whereas as the moment you have to write

  t = Net::Telnet.new(...)
  out = lambda { |c| print c }
  t.cmd("foo",&out)
  t.cmd("bar",&out)
  t.cmd("baz",&out)

Also, a Debug parameter could invoke the "<<" method instead of "call", 
which would make it usable with Files and Strings. Then Proc#<< could be 
aliased to call, and duck-typing would suddenly become a lot prettier. 
There would also be no need for Enumerator::Yielder either.

Sorry, I've strayed right off there :-)

-- 
Posted via http://www.ruby-forum.com/.

Back to comp.lang.ruby | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[ANN] To Yield or Not to Yield: An Inferable Question Michael Edgar <adgar@carboni.ca> - 2011-04-14 12:47 -0500
  Re: To Yield or Not to Yield: An Inferable Question Brian Candler <b.candler@pobox.com> - 2011-04-17 15:22 -0500
    Re: To Yield or Not to Yield: An Inferable Question Michael Edgar <adgar@carboni.ca> - 2011-04-17 16:40 -0500
      Re: To Yield or Not to Yield: An Inferable Question Ryan Davis <ryand-ruby@zenspider.com> - 2011-04-18 03:41 -0500
      Re: To Yield or Not to Yield: An Inferable Question Brian Candler <b.candler@pobox.com> - 2011-04-18 10:53 -0500
      Re: To Yield or Not to Yield: An Inferable Question Brian Candler <b.candler@pobox.com> - 2011-04-20 03:59 -0500
        Re: To Yield or Not to Yield: An Inferable Question Michael Edgar <adgar@carboni.ca> - 2011-04-20 16:46 -0500
          Re: To Yield or Not to Yield: An Inferable Question Brian Candler <b.candler@pobox.com> - 2011-04-21 04:47 -0500
            Re: To Yield or Not to Yield: An Inferable Question Robert Klemme <shortcutter@googlemail.com> - 2011-04-21 06:18 -0500
              Re: To Yield or Not to Yield: An Inferable Question Brian Candler <b.candler@pobox.com> - 2011-04-21 12:55 -0500
  Re: [ANN] To Yield or Not to Yield: An Inferable Question Robert Klemme <shortcutter@googlemail.com> - 2011-04-18 04:34 -0500
    Re: [ANN] To Yield or Not to Yield: An Inferable Question Michael Edgar <adgar@carboni.ca> - 2011-04-18 04:46 -0500
      Re: [ANN] To Yield or Not to Yield: An Inferable Question Robert Klemme <shortcutter@googlemail.com> - 2011-04-18 06:16 -0500
        Re: [ANN] To Yield or Not to Yield: An Inferable Question Michael Edgar <adgar@carboni.ca> - 2011-04-18 07:26 -0500

csiph-web