[#399938] how to read arrary with an array — "Richard D." <lists@...>

Hello. I believe this is basic question, but I'm just starting to learn

19 messages 2012/10/02

[#400050] img src while sending email ruby cgi — Ferdous ara <lists@...>

Hi

16 messages 2012/10/05

[#400351] Drop 1st and last particular character — ajay paswan <lists@...>

What is the most efficient way to drop '#' from the first place and last

15 messages 2012/10/16

[#400374] database part of a desktop application — "Sebastjan H." <lists@...>

Hi,

14 messages 2012/10/16
[#400375] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/16

On Wed, Oct 17, 2012 at 05:28:39AM +0900, Sebastjan H. wrote:

[#400377] Re: database part of a desktop application — sto.mar@... 2012/10/17

Am 16.10.2012 23:24, schrieb Chad Perrin:

[#400389] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/17

On Wed, Oct 17, 2012 at 01:39:21PM +0900, sto.mar@web.de wrote:

[#400386] Unable to send attachment, and dealing with multiple attachment — ajay paswan <lists@...>

Hi,

11 messages 2012/10/17

[#400454] Hash with Integer key issue — Wayne Simmerson <lists@...>

Hi Im new to Ruby and am getting some unexpected results from a

18 messages 2012/10/19

[#400535] Name/symbol/object type clash? What is happening here? — Todd Benson <caduceass@...>

It's nonsense code, but I'm curious as to what is going on behind the scenes...

41 messages 2012/10/23

[#400556] Calling a method foo() or an object foo.method_call_here - both — Marc Heiler <lists@...>

Hello.

13 messages 2012/10/24

[#400650] OpenSSL ECDSA public key from private — Nokan Emiro <uzleepito@...>

Hi,

11 messages 2012/10/27

[#400680] Passing folder as argument ARGV? — Joz Private <lists@...>

Is there an easy way to pass multiple files on the command line?

15 messages 2012/10/28
[#400681] Re: Passing folder as argument ARGV? — brad smith <bradleydsmith@...> 2012/10/28

How are you traversing the directory you pass in on the command line ?

[#400697] File.readable? and /proc — Jeff Moore <lists@...>

root@nail:/projects/proc_fs# uname -a

13 messages 2012/10/28

[#400714] Marshal.load weird issue — "Pierre J." <lists@...>

Hi guys

12 messages 2012/10/28

[#400781] bug?: local variable created in if modifier not available in modified expression — "Mean L." <lists@...>

irb(main):001:0> local1 if local1 = "created"

21 messages 2012/10/30
[#400807] Re: bug?: local variable created in if modifier not available in modified expression — Bartosz Dziewoński <matma.rex@...> 2012/10/31

Oh, and in case it wasn't apparent: you can just add

[#400808] Re: bug?: local variable created in if modifier not available in modified expression — Eliezer Croitoru <eliezer@...> 2012/10/31

On 10/31/2012 4:52 PM, Bartosz Dziewoナгki wrote:

[#400809] Re: bug?: local variable created in if modifier not available in modified expression — Robert Klemme <shortcutter@...> 2012/10/31

On Wed, Oct 31, 2012 at 4:28 PM, Eliezer Croitoru <eliezer@ngtech.co.il>wrote:

[#400784] REXML & HTMLentities incorrectly map to UTF-8 — "Mark S." <lists@...>

I have some XML data (UTF 8) that I'm trying to convert into another XML

13 messages 2012/10/30

Re: Name/symbol/object type clash? What is happening here?

From: Robert Klemme <shortcutter@...>
Date: 2012-10-26 17:17:43 UTC
List: ruby-talk #400634
On Fri, Oct 26, 2012 at 5:44 PM, Igor Pirnovar <lists@ruby-forum.com> wrote:
> Robert Klemme wrote in post #1081267:
>
>> You are repeating that it is broken but you fail to explain what
>> exactly is broken.  That's not a basis for discussions.
>
> I thought my statement "I believe, we all can tolerate this glitch" was
> clear enough. But if you insist to define what is broken, the reply is:
> "Ruby grammar consistency when it comes to mixing classes with Structs".

This has nothing to do with Ruby's grammar.  I think I know what
you're up to but the term is simply wrong.

> Every solution that you come up with introduces more complications and
> weird or even unacceptable run-arounds, like your underscore aliasing.

These are basically introduced because you chose to have a property
setter which modifies the value on the fly - this is also a
questionable approach.

> Try using your '_initialize' and then straight 'initialiye' and you'll

?

> create two different behaviours both of whom are wrong. One
> instantiating {{ s = S.new(0) }} with @num to 0, and the other adding 5
> twice making @num 10, when using {{ self.num = n + 5 }} idiom rather
> than {{ @num = n + 5 }}, which Struct does not recognize (this should be
> fixed, namely, Struct should honour '@ semantics'; resorting to
> 'self#var' is not sufficient in all circumstances).

I find that rather foggy.  What code are you talking about exactly?

> Struct does not honour Ruby's variable inheritance and class
> initialization grammar with respect to inheritance, i.e.: all subclasses
> have a single set of instance variables in the inheritance hierarchy.

I do not think the thing that you call "initialization grammar"
exists.  Inherit from Hash and Array and you won't see instance
variables either.  Actually, all classes which are implemented in C
(which includes std lib as well as extensions) do have the liberty to
store the state in any way they like.  Generally using accessors to
modify state is a safer method.  It just happens that in most user
written classes the direct access to instance variables works and
gives expected results.

> If
> the idiom {{ class A < Struct.new(:num); end }} makes Struct a
> superclass of A,

It doesn't - at least not directly.  Struct.new creates a new class
which sits between them.

irb(main):002:0> class A < Struct.new(:num); end
=> nil
irb(main):003:0> A.ancestors
=> [A, #<Class:0x8b37678>, Struct, Enumerable, Object, Kernel, BasicObject]

> then class A and indeed all its subclasses should
> inherit @num instance method from Struct.

First of all @num is not a method.  This is an instance variable read access.

The method does not exist in Struct - and it can't for obvious reasons.

irb(main):005:0> Struct.instance_method :num
NameError: undefined method `num' for class `Struct'
	from (irb):5:in `instance_method'
	from (irb):5
	from /usr/local/bin/irb19:12:in `<main>'

Instead it's defined in the anonymous superclass of A:

irb(main):006:0> A.instance_method :num
=> #<UnboundMethod: A(#<Class:0x8b37678>)#num>
irb(main):007:0> A.instance_method(:num).owner
=> #<Class:0x8b37678>

I am starting to wonder whether you understand how Struct works.

> Accessing Struct's @num via {{
> self.num }} works only when you are using straight assignment, however
> if you need to invoke any kind of computation, you have to resort to
> tricks like aliasing which works only sometimes.
>
>   S = Struct.new :num do
>     alias _initialize initialize
>   #  def _initialize(n)  #=> @num==0
>     def initialize(n)  #=> @num==10

???

>       super
>       self.num = n + 5
>     end
>
>     alias _num= num=
>     def num=(n) self._num= n + 5; end
>   end
>
>   s = S.new 0
>   p s.num    #=> 10; ## with: '_initialize' #=>0

It's obvious that you get wrong values if you create flawed logic.
This is also not what I had suggested.

>   s.num = 100
>   p s.num    #=> 105
>
> The trouble with Struct is that there is no way to implement
> initialization of instance variables in base class (ie. in Struct) that
> require more elaborate initialization skims than straight assignment.
> You can accomplish this only with regular classes and their inheritance
> hierarchies!

That is not true.  If you only want to modify values during
initialization you can always do

S = Struct.new :a, :b do
  def initialize(a, b)
    self.a = a * 33
    self.b = b / 10
  end
end

irb(main):026:0> x = S.new 100, 200
=> #<struct S a=3300, b=20>
irb(main):027:0> x.a
=> 3300
irb(main):028:0> x.b
=> 20

You even can omit the super invocation.

> When you have to resort to tricks to accomplish things that are not out
> of the ordinary, you better avoid those features when working outside of
> your quick and dirty domain or "research lab", and Struct certainly
> qualifies for that!

That's not a dirty trick - it's just a slightly inconvenient way to
use Struct because one cannot use #initialize as predefined.  Other
than that this is what you would for a regular class as well.  But you
still benefit from properly defined #eql?, #hash, #[] etc.  You're
simply not using the default constructor but still gain useful
functionality.  Heck, it doesn't even involve meta programming.  For
me this does not qualify as hack or trickery.

Cheers

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread