[#400858] Support for multiple Inheritance by classes — Ross Konsolebox <lists@...>

Will Ruby ever support multiple inheritance through classes instead of

23 messages 2012/11/03
[#400859] Re: Support for multiple Inheritance by classes — Arlen Cuss <ar@...> 2012/11/03

I think I can say "no" with a fair amount of confidence.

[#400902] Re: Support for multiple Inheritance by classes — Ross Konsolebox <lists@...> 2012/11/04

Arlen Cuss wrote in post #1082618:

[#400904] Re: Support for multiple Inheritance by classes — Peter Hickman <peterhickman386@...> 2012/11/04

Even though other languages handle multiple inheritance without any

[#400865] why does UnboundMethod need to remember the class it was retrieved from (not merely owner)? — "Mean L." <lists@...>

class Base; def foo; end end

17 messages 2012/11/03

[#400914] login web page using mechanize — john smith <lists@...>

new to ruby, love the language. read programmatic programmers guide to

25 messages 2012/11/04

[#400985] How to merge two or more hashes in to one? — "Jermaine O." <lists@...>

Hi everyone.

14 messages 2012/11/06

[#401026] Site down watir-webdriver — ajay paswan <lists@...>

Whenever a site is down it keeps on looking for it for sometime and

14 messages 2012/11/07

[#401027] Closing popups watir-webdriver — ajay paswan <lists@...>

Sometimes popup comes when a link is clicked, sometimes popup comes when

14 messages 2012/11/07

[#401125] Complete newbie — "Carlos A." <lists@...>

Hey guys!

14 messages 2012/11/10

[#401161] Convert date to string — Ferdous ara <lists@...>

Hi

12 messages 2012/11/11

[#401173] question on watir — Raj pal <lists@...>

I am automating Idit application using Ruby, at one screen I can't feed

233 messages 2012/11/12

[#401191] Extending Array instances — Charles Hixson <charleshixsn@...>

I'm trying to figure out a good way to extend an Array, when the items

17 messages 2012/11/12
[#401195] Re: Extending Array instances — Brian Candler <lists@...> 2012/11/12

Charles Hixson wrote in post #1084111:

[#401200] Efficient way for comparing records between 2 large files (16 million records) — Ruby Student <ruby.student@...>

Team,

9 messages 2012/11/12

[#401274] following along with "Beginning Ruby." — Al Baker <lists@...>

I'm having trouble following along with some of the examples in this

15 messages 2012/11/15

[#401279] Question on exceptions — Justin Gamble <lists@...>

Hello! I have a simple bank program where I have to have an exception

16 messages 2012/11/15
[#401281] Re: Question on exceptions — Justin Gamble <lists@...> 2012/11/15

What is the reason of doing the .new(...)in

[#401295] Re: Question on exceptions — Brian Candler <lists@...> 2012/11/16

Justin Gamble wrote in post #1084635:

[#401296] Re: Question on exceptions — tamouse mailing lists <tamouse.lists@...> 2012/11/16

On Fri, Nov 16, 2012 at 1:43 AM, Brian Candler <lists@ruby-forum.com> wrote:

[#401301] Alternatives to methods for large number of nested "ifs" — Philip Rhoades <phil@...>

People,

11 messages 2012/11/16

[#401336] Advice for simple client/server application — Panagiotis Atmatzidis <atma@...>

Hello,

12 messages 2012/11/17

[#401364] Metaprogramming — "Aurimas N." <lists@...>

Hello,

12 messages 2012/11/19

[#401404] "undefined method `synchronize' for #<Mutex:0xa0f5adc>" from embedded Ruby program — Graham Menhennitt <graham@...>

I'm writing a C++ program (on Centos 5 Linux) that embeds a Ruby 1.9.3

9 messages 2012/11/21

[#401422] how to increase variable inside the while loop — Ferdous ara <lists@...>

Hi, my question might be confusing as its hard for me to make it clear,

12 messages 2012/11/21

[#401451] Arrays with records as objects — Steve Tucknott <lists@...>

I am completely new to Ruby.

11 messages 2012/11/22

[#401458] working with mysql in ruby — john smith <lists@...>

i have been trying to successfully connect ruby with mysql. there are a

17 messages 2012/11/22

[#401567] click on link not working with ie #watir-webdriver — ajay paswan <lists@...>

Greetings,

12 messages 2012/11/26

[#401578] atomic statements in multithreading — ajay paswan <lists@...>

suppose I am working in multiple thread each thread runs following

10 messages 2012/11/26

[#401607] Novice: Understanding instance 'variables' and methods — Steve Tucknott <lists@...>

A question - or comment - on instance variables.

10 messages 2012/11/26

[#401644] Getting the smallest Items of an Array — "Ismail M." <lists@...>

Hello guys,

14 messages 2012/11/27

[#401655] gem problems(sigh) — Al Baker <lists@...>

i tried to make a gem and tried to build the spec file and this is what

10 messages 2012/11/28

[#401688] sorting data from a file — "Ismail M." <lists@...>

Hey guys,

16 messages 2012/11/28

[#401706] Newbie question: (free) on-line courses? — Ken D'Ambrosio <ken@...>

Hello, all. There's a bunch of free on-line training for Javascript,

11 messages 2012/11/28

Re: bug?: local variable created in if modifier not available in modified expression

From: Brian Candler <lists@...>
Date: 2012-11-04 11:59:11 UTC
List: ruby-talk #400903
Igor Pirnovar wrote in post #1082740:
> You are misleading us here with {{ def bar; "Method bar"; end }} before
> the assignment in {{ bar if bar = 123 }}, because parser now thinks that
> it sees the method bar.

On the contrary, it is you who are misleading people with your 
inaccurate information.

In your defence, I will say that ruby is a language which is not 
formally specified or documented, and therefore it is easy to come up 
with misinterpretations of what you see. However, there are people on 
this list who will try to enlighten you, if you will take the trouble to 
listen.

> Try it with a new variable, that is not shadowed
> by another token like in your case the bar method, and you will see,
> that interpreter exits with the error! For instance:
>
>    p "v5:#{v5 if ((v5='created')!='')}"  #=> FAILS with:
>     # t.rb:28:in `<main>': undefined local variable \
>     # or method `v5' for main:Object (NameError)

Indeed it does, and the error message says "undefined local variable or 
method"

Ruby has interpreted the first v5 as a method call, because no local 
variable assignment statement exists lexically earlier in the scope. So 
it has tried to call method v5(), and failed.

However it cannot know whether the programmer intended v5 to be a 
variable or method. It could be that you intended to use a variable, but 
mistyped the name:

v5 = nil
puts vv5   # Oops, I mistyped the variable name

vv6 = nil  # Oops, I mistyped the variable name at assignment time
puts v6

Or it could be that you intended to call a method but mistyped it:

def v7; "ok"; end
puts vv7   # Oops, I mistyped the method name

So the best that Ruby can say is "undefined local variable or method". 
But what it actually means is: v5 is *definitely* not a local variable 
at this point, so I tried invoking it as a method, but there is no 
method called v5 at this point in time.

Note: whether v5 exists as a method or not can only be known at runtime, 
because methods are created dynamically as the program runs.

> Precedence may not be important, though I am not sure it is not, since
> the run-time must wait for the condition to be evaluated, therefore  it
> will execute the assignment inside the 'if' expression in accordance
> with precedence, namely prior 'if' expression itself is evaluated, hence
> allowing the evaluation of the expression in front of the conditional,
> the run-time was waiting for.

Wrong. The resolution of the variable name / method call ambiguity is 
not done at run-time. It is done at *parse* time, when the source file 
is being read in and the AST is being built, before the AST is executed.

If you don't believe me, then try making a source file which cannot be 
parsed, like this:

puts "hello"
class Foo    # missing end

You will see something like this:

syntax error, unexpected $end

But notice that the word "hello" does not appear on your screen. This is 
because execution cannot start until the file has been completely parsed 
from top to bottom.  Balancing class/end and def/end is a parse-time 
activity.

Now, it is during this *parsing* phase that the decision is made as to 
whether a bareword 'foo' is to be interpreted as a method call or as a 
local variable reference. And this happens before even one statement 
from this file has been executed.

> Also, the fact that {{ puts var||='n/a' if var=123 }} works as expected,
> and {{ puts var if var=123 }} does not, proves that evaluation here is
> right-to-left regardless of the fact that parser works in the opposite
> direction, after all, if parser would react to the first assignment it
> encountered in 'strictly' left-to-right fashion the result should be
> 'n/a' and not 123 that was evaluated last.

var||='n/a' is an assignment to var and therefore springs a local 
variable into existence at that point lexically. You can consider it as 
a shortcut for var = var || 'n/a', although it is not exactly like that.

The execution sequence obviously requires the 'if' condition to be 
evaluated before the LHS can be conditionally executed.

if var = 123     # assigns 123 to var, evaluates as true, hence LHS is 
run

puts var||='n/a'   # prints 123, because var has already been assigned 
to

So evaluation is right-before-left, at the time where the AST is 
executed. This still does not change the fact that it is parsed 
left-to-right.

Hence, if you have not assigned to var previously, then
    puts var if var=123
is parsed as
    puts var() if var=123

It treats the first bareword 'var' to be resolved as a method call; it 
will fail unless a method called 'var' has been defined.

The final point you need to be clear on: whether an assignment is 
*executed* or not makes no difference. It's simply whether it is parsed 
as one. So for example:

if false
  baz = 123
end
puts baz    # prints nil - does not give an error

Regards,

Brian.

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

In This Thread