Czy to jest dobrze zrobione?

Treść zadania:
Bloki jednoparametrowe można traktować jak definicję jednoargumentowej funkcji
matematycznej. Na przykład blok { | x | xxMath.sin(x) } reprezentuje funkcję
x → x2 ∗sin(x). Dzięki temu można zdefiniować własną klasę Funkcja reprezentującą funkcje,
gdzie definicja funkcji jest zadana blokiem (a właściwie obiektem klasy Proc) w konstruktorze.
Zaimplementuj klasę Funkcja5 wraz z metodami:

class Funkcja

def initialize(funkcja)
	@funkcja = funkcja
end

end

f = Funkcja.new (Proc.new{|x| xxMath.sin(x)})

Czy to jest ok zrbione niepokoi mnie f = Funkcja.new (Proc.new) ten zapis czy tak to powinno wygladac czy jednak jest to zle zrobione?

Zamiast się zastanawiać czy to jest dobry sposób po prostu zweryfikuj to:

class Funkcja
  def initialize(funkcja)
    @funkcja = funkcja
  end

  def call(x)
    @funkcja.call(x)
  end
end

puts Funkcja.new(Proc.new { |x| x * 2 }).call(10)

Proc.new można zapisać też jako proc.

Istnieje jeszcze drugi, odrobinę bardziej zwięzły sposób na przekazywanie bloku do metody:

class Funkcja
  def initialize(&block)
    @funkcja = block
  end

  def call(x)
    @funkcja.call(x)
  end
end

puts Fun.new { |x| x * 2 }.call(10)

Sprawdziłeś ? :smiley: