方法未定义?

时间:2013-01-29 18:18:31

标签: ruby

我是红宝石的新手。我试着做一个简单的方法(带参数)调用。

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方法也给了我同样的错误。发生了什么事?

4 个答案:

答案 0 :(得分:5)

您定义了一个实例方法,但是您尝试在类对象上调用它。试试这个:

MeowEncoder.new.method(s)

此外,method是方法的错误名称。它会导致name clash

答案 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)