/ / ¿Cómo se define "<" para la clase en rubí en términos de herencia? - rubí, clase, estructura

¿Cómo se define “<” para la clase en rubí en términos de herencia? - Rubí, clase, estructura.

¿Qué sucede exactamente cuando heredas de Struct.new en lugar de una clase? O en otras palabras, ¿cómo es el < operador definido para la clase cuando se usa con objetos de estructura en lugar de objetos de clase?

Caso 1:

class SomeClass < ParentClass; end;

Caso 2

AClass = Struct.new(:value)
class SubClass < AClass; end;

Caso 3:

class SubClass < Struct.new(:value); end;

Respuestas

2 para la respuesta № 1

Hay exactamente cero diferencia entre esos tres casos. En los tres casos, el operando correcto de < es una expresión que, cuando se evalúa, devuelve un Class. En los casos 1 y 3, es una constante que se desreferencia, en el caso 2, es una llamada al método.

A pesar de la aparente complejidad de Ruby, es más regular de lo que piensas


3 para la respuesta № 2

Caso 1:

Esta es una herencia estándar que no involucra una estructura. No estoy seguro de lo que le gustaría saber sobre esto.

Caso 2

Struct.new devuelve una clase que tiene los atributos dados al método de inicialización. Por ejemplo, la siguiente estructura y clase Foo se comportan igual.

Struct.new(:bar, baz)

class Foo
attr_reader :bar, :baz

def initialize(bar, baz)
@bar = bar
@baz = baz
end
end

Dado que la estructura y la clase anteriores tienen el mismo comportamiento, heredar de ellas le daría a la subclase esa funcionalidad.

class Bar < Struct.new(:bar, :baz)
end

bar_struct = Bar.new("hello", "world")
bar_struct.bar # => "hello"
bar_struct.baz # => "world"

class Bar < Foo
end

bar_class = Bar.new("hello", "world")
bar_class.bar # => "hello"
bar_class.baz # => "world"

Caso 3:

Esto es idéntico al caso 2. La única diferencia aquí es que ha asignado la estructura a la constante AClass