[#13161] hacking on the "heap" implementation in gc.c — Lloyd Hilaiel <lloyd@...>

Hi all,

16 messages 2007/11/01

[#13182] Thinking of dropping YAML from 1.8 — Urabe Shyouhei <shyouhei@...>

Hello all.

14 messages 2007/11/03

[#13315] primary encoding and source encoding — David Flanagan <david@...>

I've got a couple of questions about the handling of primary encoding.

29 messages 2007/11/08
[#13331] Re: primary encoding and source encoding — Yukihiro Matsumoto <matz@...> 2007/11/09

Hi,

[#13368] method names in 1.9 — "David A. Black" <dblack@...>

Hi --

61 messages 2007/11/10
[#13369] Re: method names in 1.9 — Yukihiro Matsumoto <matz@...> 2007/11/10

Hi,

[#13388] Re: method names in 1.9 — Charles Oliver Nutter <charles.nutter@...> 2007/11/11

Yukihiro Matsumoto wrote:

[#13403] Re: method names in 1.9 — "Austin Ziegler" <halostatue@...> 2007/11/11

On 11/11/07, Charles Oliver Nutter <charles.nutter@sun.com> wrote:

[#13410] Re: method names in 1.9 — David Flanagan <david@...> 2007/11/11

Austin Ziegler wrote:

[#13413] Re: method names in 1.9 — Charles Oliver Nutter <charles.nutter@...> 2007/11/11

David Flanagan wrote:

[#13423] Re: method names in 1.9 — Jordi <mumismo@...> 2007/11/12

Summing it up:

[#13386] Re: method names in 1.9 — Trans <transfire@...> 2007/11/11

[#13391] Re: method names in 1.9 — Matthew Boeh <mboeh@...> 2007/11/11

On Sun, Nov 11, 2007 at 05:50:18PM +0900, Trans wrote:

[#13457] mingw rename — "Roger Pack" <rogerpack2005@...>

Currently for different windows' builds, the names for RUBY_PLATFORM

13 messages 2007/11/13

[#13485] Proposal: Array#walker — Wolfgang Nádasi-Donner <ed.odanow@...>

Good morning all together!

23 messages 2007/11/14
[#13486] Re: Proposal: Array#walker — Wolfgang Nádasi-Donner <ed.odanow@...> 2007/11/14

A nicer version may be...

[#13488] Re: Proposal: Array#walker — Trans <transfire@...> 2007/11/14

[#13495] Re: Proposal: Array#walker — Trans <transfire@...> 2007/11/14

[#13498] state of threads in 1.9 — Jordi <mumismo@...>

Are Threads mapped to threads on the underlying operating system in

30 messages 2007/11/14
[#13519] Re: state of threads in 1.9 — "Bill Kelly" <billk@...> 2007/11/14

[#13526] Re: state of threads in 1.9 — Eric Hodel <drbrain@...7.net> 2007/11/14

On Nov 14, 2007, at 11:18 , Bill Kelly wrote:

[#13528] test/unit and miniunit — Ryan Davis <ryand-ruby@...>

When is the 1.9 freeze?

17 messages 2007/11/14

[#13564] Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc. — Wolfgang Nádasi-Donner <ed.odanow@...>

Good evening all together!

53 messages 2007/11/15
[#13575] Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc. — "Nikolai Weibull" <now@...> 2007/11/15

On Nov 15, 2007 8:14 PM, Wolfgang N=E1dasi-Donner <ed.odanow@wonado.de> wro=

[#13578] Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc. — Michael Neumann <mneumann@...> 2007/11/16

Nikolai Weibull schrieb:

[#13598] wondering about #tap (was: Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc.) — "David A. Black" <dblack@...> 2007/11/16

Hi --

[#13605] Re: wondering about #tap (was: Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc.) — Trans <transfire@...> 2007/11/16

[#13612] Re: wondering about #tap (was: Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc.) — "David A. Black" <dblack@...> 2007/11/16

Hi --

[#13624] Re: wondering about #tap (was: Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc.) — "Nikolai Weibull" <now@...> 2007/11/16

On Nov 16, 2007 12:40 PM, David A. Black <dblack@rubypal.com> wrote:

[#13632] Re: wondering about #tap — David Flanagan <david@...> 2007/11/16

David A. Black wrote:

[#13634] Re: wondering about #tap — "David A. Black" <dblack@...> 2007/11/16

Hi --

[#13636] Re: wondering about #tap — "Rick DeNatale" <rick.denatale@...> 2007/11/16

On Nov 16, 2007 12:40 PM, David A. Black <dblack@rubypal.com> wrote:

[#13637] Re: wondering about #tap — murphy <murphy@...> 2007/11/16

Rick DeNatale wrote:

[#13640] Re: wondering about #tap — Wolfgang Nádasi-Donner <ed.odanow@...> 2007/11/16

murphy schrieb:

[#13614] Suggestion for native thread tests — "Eust痃uio Rangel" <eustaquiorangel@...>

Hi!

12 messages 2007/11/16

[#13685] Problems with \M-x in utf-8 encoded strings — Wolfgang Nádasi-Donner <ed.odanow@...>

Hi!

11 messages 2007/11/18

[#13741] retry semantics changed — Dave Thomas <dave@...>

In 1.8, I could write:

46 messages 2007/11/23
[#13742] Re: retry semantics changed — "Brian Mitchell" <binary42@...> 2007/11/23

On Nov 23, 2007 12:06 PM, Dave Thomas <dave@pragprog.com> wrote:

[#13743] Re: retry semantics changed — Dave Thomas <dave@...> 2007/11/23

[#13746] Re: retry semantics changed — Yukihiro Matsumoto <matz@...> 2007/11/23

Hi,

[#13747] Re: retry semantics changed — Dave Thomas <dave@...> 2007/11/23

[#13748] Re: retry semantics changed — Yukihiro Matsumoto <matz@...> 2007/11/23

Hi,

[#13749] Re: retry semantics changed — Dave Thomas <dave@...> 2007/11/23

Re: wondering about #tap (was: Re: Thoughts about Array#compact!, Array#flatten!, Array#reject!, String#strip!, String#capitalize!, String#gsub!, etc.)

From: "Nikolai Weibull" <now@...>
Date: 2007-11-19 09:05:13 UTC
List: ruby-core #13701
On Nov 16, 2007 6:05 PM, David A. Black <dblack@rubypal.com> wrote:
> Hi --
>
> On Sat, 17 Nov 2007, Nikolai Weibull wrote:
>
>
> > On Nov 16, 2007 12:40 PM, David A. Black <dblack@rubypal.com> wrote:
> >
> >> It's interesting that almost every example of #tap ends up saying that
> >> it's probably better not to use it, for one reason or another (usually
> >> readability; sometimes the dangers of mixing bang and non-bang
> >> methods).
> >>
> >> It makes me wonder whether the main effect of #tap is going to be a
> >> lot of warnings that it isn't a best practice. Or are there examples
> >> that *don't* look worse than the alternatives?
> >
> > def cleverly_return_an_array_after_building_it
> >  Array.new.tap do |ary|
> >    [1, 2, 3].each do |i|
> >      ary << i
> >    end
> >  end
> > end
> >
> > instead of
> >
> > def return_an_array_in_an_unclever_fashion_after_building_it
> >  ary = []
> >  [1, 2, 3].each do |i|
> >    ary << i
> >  end
> >  ary
> > end
> >
> > (Yeah, that's a horrible example, but you the point is valid.
>
> But my point is that *all* examples seem to be horrible, so a horrible
> example isn't a counter-illustration :_) After a while, one starts to
> wonder whether maybe #tap is just ugly and non-conducive to elegant
> code.

OK.  What follows is the scanner.rb file from my ruby-lisp library.
Substitute "returning v" with "v.tap".

I think this pattern makes the code a lot simpler than if I had
written it without returning or #tap.

# contents: Scanner that lexes and parses format strings into directives.
#
# Copyright (c) 2005 Nikolai Weibull <nikolai@bitwi.se>

require 'stringio'
require 'forwardable'
require 'injector'

require 'lisp/format/directives'
require 'lisp/format/parameters'
require 'lisp/format/modifiers'

class Lisp::Format::Scanner
  extend Forwardable
  extend Injector

  needs 'lisp/format/error'

  DirectiveChar = ?~

  def initialize(format)
    @format, @stack = StringIO.new(format), []
  end

  def rest
    returning([]){ |ds| while d = scan: ds << d end }
  end

  def with(directive)
    @stack.push directive
    while d = scan: yield d end
    raise Error.new(directive.pos, 'no corresponding end bracket
found') unless d
  ensure
    @stack.pop
  end

  def between(left, right)
    right = Lisp::Format::Directives[right]
    returning [] do |directives|
      with(left) do |directive|
        directives << directive
        break if directive.is_a? right
      end
    end
  end

  def while
    returning "" do |str|
      until @format.eof?
        if not yield c = @format.getc
          @format.ungetc(c)
          break
        end
        str << c
      end
    end
  end

  def processing?(directive)
    @stack.last.is_a?(directive) ? @stack.last : nil
  end

  def_delegator :@format, :ungetc

private

  def scan
    return nil if @format.eof?
    if (c = @format.getc) == DirectiveChar
      params = parse_params
      modifiers = parse_modifiers
      directive = parse_directive
      directive.new(params, modifiers, @format.pos, self)
    else
      returning Lisp::Format::Directives::Pseudo::Literal.new(c.chr)
do |literal|
        literal << c.chr while c = @format.getc and c != DirectiveChar
        @format.ungetc(c) if c == DirectiveChar
      end
    end
  end

  def parse_params
    returning Lisp::Format::Parameters::List.new do |params|
      until @format.eof?
        break unless param = Lisp::Format::Parameters::Parameter.parse(@format)
        params << param
        unless @format.eof?
          if (c = @format.getc) != ?,
            @format.ungetc(c)
            break
          end
        end
      end
    end
  end

  def parse_modifiers
    returning Lisp::Format::Modifiers[false, false] do |ms|
      none = ms
      until @format.eof?
        break unless m = Lisp::Format::Modifiers.parse(@format)
        raise error('duplicate modifier '~C'', c) if ms & m != none
        ms |= m
      end
    end
  end

  def parse_directive
    if @format.eof?
      raise error('format string ended before directive was found')
    elsif not Lisp::Format::Directives.include?(c = @format.getc.chr.upcase[0])
      raise error('unkown directive '~~~C'', c)
    else
      Lisp::Format::Directives[c]
    end
  end

  def error(format, *args)
    Error.new(@format.pos, format, *args)
  end
end

In This Thread