Problem z wywołaniem metody

Witam wszystkich,
nie potrafię wywołać tego o to kodu, po wywołaniu pliku nic się nie dzieję, a powinno pokazywać zaszyfrowaną treść.

`class code

def caesar_code(string, shift = 1)
alphabet = Array(‘a’…‘z’)
non_caps = Hash[alphabet.zip(alphabet.rotate(shift))]

alphabet = Array('A'..'Z')
caps     = Hash[alphabet.zip(alphabet.rotate(shift))]

encrypter = non_caps.merge(caps)

string.chars.map { |c| encrypter.fetch(c, c) }

puts caesar_code(‘abc’)

end
end
`

Hej, na pierwszy rzut oka w złym miejscu wywołujesz puts, bo znajduje się jeszcze w kodzie metody. W ten sposób stworzyłeś funkcję rekurencyjną wywołującą się bez końca i prawdopodobnie dostaniesz SystemStackError. Spróbuj może tak:

def caesar_code(string, shift = 1)
  alphabet = Array('a'..'z')
  non_caps = Hash[alphabet.zip(alphabet.rotate(shift))]

  alphabet = Array('A'..'Z')
  caps     = Hash[alphabet.zip(alphabet.rotate(shift))]

  encrypter = non_caps.merge(caps)

  string.chars.map { |c| encrypter.fetch(c, c) }
end
  
puts caesar_code('abc')

Wyskakuję unexpected end-of-input

Możesz wkleić cały plik w takim razie?

`class Code

def caesar_code(string, shift = 1)
alphabet = Array(‘a’…‘z’)
non_caps = Hash[alphabet.zip(alphabet.rotate(shift))]

alphabet = Array(‘A’…‘Z’)
caps = Hash[alphabet.zip(alphabet.rotate(shift))]

encrypter = non_caps.merge(caps)

string.chars.map { |c| encrypter.fetch(c, c) }
end

puts caesar_code(‘abc’)’

ok, to teraz tak. Słowa kluczowe class, module i def zawsze muszą mieć odpowiadający sobie end bo inaczej dostaniesz SyntaxError jak w tym przypadku. Jedyne co musisz dodać to end przed puts, który bedzie domykał blok class. Pamiętać musisz, że stworzyłeś metodę instancji w Code więc żeby wszystko zadziałało najpierw potrzebujesz instancji na której wywołasz funkcje caesar_code.

code = Code.new
puts code.caesar_code('abc')

lub

puts Code.new.caesar_code('abc')

Dziękuję za pomoc, wszystko działa, nie wiedziałem właśnie o tej instancji, która jest potrzebna do wywołania funkcji.

1 Like