我是红宝石的新手。我试着做一个简单的方法(带参数)调用。
class MeowEncoder
def method(c)
puts c
end
end
print "please enter the thing you want"
s = gets.chomp()
MeowEncoder.method(s)
只传递参数并将其打印出来。但终端一直给我错误,如
:MeowEncoder.rb:9: undefined method `toBinary' for MeowEncoder:Class (NoMethodError)
这里发生了什么?
我做了一些改进。
class MeowEncoder
def encode(n)
toBianry(?n)
puts ""
end
def toBinary(n)
if n < 2
print n
else
toBinary(n / 2)
print n % 2
end
end
end
o = MeowEncoder.new
print "please enter the thing you want: "
s = gets.chomp()
s.each_char{|c| o.encode(c)} #this doesn't work
o.toBinary(212) # this works
我在这里做了一些改进。我尝试将char转换为ASCII值,然后转换为二进制形式。我可以做单一到二部作品。但是Encode方法也给了我同样的错误。发生了什么事?
答案 0 :(得分:5)
答案 1 :(得分:2)
为了扩展Sergio的答案,如果你真的想要在类上定义的方法,有几种方法可以实现,但最直接的方法是在self
之前添加方法定义,如下所示:
def self.method(c)
puts c
end
这将允许您按照当前的方式调用方法。
这样做的原因是,在定义方法的上下文中,self
被设置为MeowEncoder
类。这相当于说:
def MeowEncoder.method(c)
puts c
end
这实际上是声明类方法的另一种有效方法,但使用self
是更好的做法,因为如果您更改类的名称,重构会变得更容易。
答案 2 :(得分:0)
而不是 each_char 使用 each_byte 而不需要编码方法。
s.each_byte{|c| o.toBinary(c)}
答案 3 :(得分:0)
Book (title, author)
Author (pseudonym, first_name, last_name)
Book_catalog => collection of books
methods
add_book(book)
remove_book(book)
borrow_book(borrower, book) => voeg boek toe aan borrower.books_borrowed
return_book(borrower, book) => verwijder boek uit borrower.books_borrowed
book_available?(book)
search(title) => geeft gevonden book-object terug (anders nil)
Book_borrowing
book (read-only), date_of_borrowing (read-only), date_of_return (read-only)
borrow_book(book_to_borrow) : @date_of_borrowing = systeem-datum+uur
return_book(book_to_return) : @date_of_return = systeem-datum+uur
Borrower
member_nbr, first_name, last_name, books_borrowed = collection of Book_borrowing
has_book_by_title(title) => geeft true of false terug
has_book(book) => geeft true of false terug
Person(first_name, last_name)