0

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

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 值,然后转换为它的二进制形式。我可以制作单个 toBinary 作品。但是 Encode 方法也给了我同样的错误。发生了什么?

4

4 回答 4

5

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

MeowEncoder.new.method(s)

此外,对于一种方法来说,method这是一个名字。这将导致名称冲突

于 2013-01-29T18:20:19.783 回答
2

为了扩展 Sergio 的答案,如果您真的想要在类上定义方法,有几种方法可以实现,但最直接的方法是在方法定义之前添加self如下所示:

def self.method(c)
  puts c
end

这将允许您以当前方式调用该方法。

这个工作的原因是,在定义方法的上下文中,self设置为MeowEncoder类。相当于说:

def MeowEncoder.method(c)
  puts c
end

这实际上是声明类方法的另一种有效方式,但使用self是更好的做法,因为如果您更改类的名称,重构会变得更容易。

于 2013-01-29T18:44:37.973 回答
0

而不是each_char使用each_byte并且不需要编码方法。

s.each_byte{|c| o.toBinary(c)}
于 2013-01-29T18:54:39.350 回答
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)
于 2013-12-24T08:32:29.127 回答