Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Semantics of << and <<-

Reply
Thread Tools

Semantics of << and <<-

 
 
Anders Höckersten
Guest
Posts: n/a
 
      08-31-2005
Hi,
I recently joined this list, so please forgive me if this question has
been asked recently. I am wondering about the precise semantics of <<
and <<-. "Programming Ruby"[1] and the pseudo-BNFs[2][3] say that you
can use a quoted string after <<. As I see it, this means I should be
able to able to use the #{expr} construct inside this string, like this:
print <<"#{2+2}"
foobar
#{4}

This is, however, not the way my installation of Ruby (1.8.1) works.
What I am wondering is, is this the expected behaviour and are both the
book and the pseudo-BNFs wrong, or is this some form of bug in the
interpreter?

Best regards,
Anders

[1] Programming Ruby, 2nd Edition, p. 321
[2] http://www.ruby-doc.org/docs/ruby-doc-
bundle/Manual/man-1.4/yacc.html
[3] http://www.ruby-lang.org/ja/man/?cmd...BB%F7BNF%A4%CB
%A4%E8%A4%EBRuby%A4%CE%CA%B8%CB%A1



 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      08-31-2005
2005/8/31, Anders H=F6ckersten <(E-Mail Removed)>:
> Hi,
> I recently joined this list, so please forgive me if this question has
> been asked recently. I am wondering about the precise semantics of <<
> and <<-. "Programming Ruby"[1] and the pseudo-BNFs[2][3] say that you
> can use a quoted string after <<. As I see it, this means I should be
> able to able to use the #{expr} construct inside this string, like this:
> print <<"#{2+2}"
> foobar
> #{4}
>=20
> This is, however, not the way my installation of Ruby (1.8.1) works.
> What I am wondering is, is this the expected behaviour and are both the
> book and the pseudo-BNFs wrong, or is this some form of bug in the
> interpreter?


My guess would be that it's an omission in the documentation. I don't
think you can do interpolation in the string. Basically it's not a
Ruby string but an idendifier and the quotation announces differnt
behaviro. After all, what do you gain by a computed terminator of a
here document? I don't think that's useful.

See http://www.ruby-doc.org/docs/ProgrammingRuby/#UD

Kind regards

robert


 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      08-31-2005
2005/8/31, Robert Klemme <(E-Mail Removed)>:
> 2005/8/31, Anders H=F6ckersten <(E-Mail Removed)>:
> > Hi,
> > I recently joined this list, so please forgive me if this question has
> > been asked recently. I am wondering about the precise semantics of <<
> > and <<-. "Programming Ruby"[1] and the pseudo-BNFs[2][3] say that you
> > can use a quoted string after <<. As I see it, this means I should be
> > able to able to use the #{expr} construct inside this string, like this=

:
> > print <<"#{2+2}"
> > foobar
> > #{4}
> >
> > This is, however, not the way my installation of Ruby (1.8.1) works.
> > What I am wondering is, is this the expected behaviour and are both the
> > book and the pseudo-BNFs wrong, or is this some form of bug in the
> > interpreter?

>=20
> My guess would be that it's an omission in the documentation. I don't
> think you can do interpolation in the string. Basically it's not a
> Ruby string but an idendifier and the quotation announces differnt
> behaviro. After all, what do you gain by a computed terminator of a
> here document? I don't think that's useful.
>=20
> See http://www.ruby-doc.org/docs/ProgrammingRuby/#UD


Here's the correct link:

http://www.ruby-doc.org/docs/Program...nguage.html#UD


 
Reply With Quote
 
William James
Guest
Posts: n/a
 
      08-31-2005
Anders Höckersten wrote:
> Hi,
> I recently joined this list, so please forgive me if this question has
> been asked recently. I am wondering about the precise semantics of <<
> and <<-. "Programming Ruby"[1] and the pseudo-BNFs[2][3] say that you
> can use a quoted string after <<. As I see it, this means I should be
> able to able to use the #{expr} construct inside this string, like this:
> print <<"#{2+2}"
> foobar
> #{4}


The purpose of quoting the here-document label is to make the
text be treated as though it were enclosed in single quotes.
----------------------------------------------
puts <<'HERE'
#{3**3} bells.
HERE

puts <<"HERE"
#{3**3} bells.
HERE

puts <<HERE
#{3**3} bells.
HERE
------------------------------------------------

#{3**3} bells.
27 bells.
27 bells.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Set and .equals() semantics Mark Space Java 17 05-09-2008 11:53 PM
SYNTAX AND SEMANTICS Prof.Stanley C Programming 6 06-08-2006 02:11 AM
SYNTAX AND SEMANTICS Prof.Stanley C++ 6 05-28-2006 02:51 AM
How to overload operator= to have both deep copy and shallow copy semantics bluekite2000@gmail.com C++ 1 06-24-2005 05:28 PM
Import Semantics, or 'What's the scope of an import?', and classattribute instantiation Andrew James Python 1 12-04-2004 03:28 PM



Advertisments