[#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: Instance name of a class/object?

From: Brian Candler <lists@...>
Date: 2012-11-11 09:31:25 UTC
List: ruby-talk #401146
Carolyn Grant wrote in post #1083906:
> basic_config = MySettings.new # Picks up & processes basic_config.yml
> adv_config = MySettings.new   # Picks up & processes adv_config.yml

In general it doesn't make any sense for an object to know its "name", 
because an object may have zero or many names at any time. You can 
assign the object reference to local variables, to global variables, to 
instance variables of other objects, to constants, as elements of an 
Array or Hash, etc.

In the above code, the object created by MySettings.new has no name at 
the time it is created. Only after the #new function has returned the 
object reference, it is assigned to the local variable.

So for the code you are writing above, I would strongly advise passing 
the filename (or filename stem) as an argument:

basic_config = MySettings.new("basic_config.yaml")
adv_config = MySettings.new("adv_config.yaml")

Of course, as with many things in Ruby, there is an exception. The 
exception is to do with class objects; that is, objects of class Class. 
Normally classes are held in constants, and the first time a class is 
assigned to a constant, it learns its name, and the name becomes an 
attribute of the class itself.

A class definition like "class Foo" both creates the class and assigns 
it to a constant, but you can see the behaviour if you first create an 
anonymous class, and then later assign it to a constant.

>> foo = Class.new
=> #<Class:0x106c91650>
>> my_instance = foo.new
=> #<#<Class:0x106c91650>:0x106c8e6f8>
>> Bar = foo
=> Bar
>> foo
=> Bar
>> my_instance
=> #<Bar:0x106c8e6f8>
>> Baz = foo
=> Bar
>> foo
=> Bar
>> my_instance
=> #<Bar:0x106c8e6f8>

> I tried my_class.name; that returns a "Method not defined" error" (I'm
> using 1.9.3p194)

You'll have to show the code. I use ruby 1.8, but it works fine for me. 
Notice that "name" is a method of the class, not the instance, and is 
only for Class objects because of the special-case behaviour described 
above.

>> foo.name
=> "Bar"
>> my_instance.class.name
=> "Bar"
>> my_instance.name
NoMethodError: undefined method `name' for #<Bar:0x106c8e6f8>
        from (irb):11

> What I'd really like to avoid is:
>
> basic_config = MySettings.new(basic_config).

Why? It seems you want to create "magic" which will be very difficult 
for another programmer to follow. When you create an object, you should 
pass all the data which will be used to create state in that object, and 
you should allow the caller to decide what to do with the returned 
object.

The closest I could recommend is if you have a single config object 
which holds all the sub-configs e.g. a hash. Then a single method 
argument can say which file to load *and* which hash member to put it 
in. For example:

require 'yaml'
class Configs
  def initialize
    @configs = {}
  end
  def load(stem)
    @configs[stem] = File.open("#{stem}.yaml") do |f|
      YAML.load(f)
    end
  end
  def [](stem)
    @configs[stem]
  end
end

config = Configs.new
config.load "basic_config"
config.load "adv_config"
puts config["basic_config"].inspect

Of course, if you want the config to be globally accessible throughout 
your application, then you can assign it to a constant instead of a 
local variable.

Config = Configs.new
Config.load "basic_config"
Config.load "adv_config"
puts Config["basic_config"].inspect

Or you could use a global variable, but a constant is generally 
preferred. Constants can be put into namespaces, e.g. MyApp::Config, to 
avoid clashes with other uses of Config.

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

In This Thread