Ruby 方法未定义?

Ruby 方法未定义?,ruby,Ruby,我对ruby是新手。我尝试了一个简单的方法(带参数)调用 它只是传递参数并将其打印出来。但终端机总是给我这样的错误 :MeowEncoder.rb:9: undefined method `toBinary' for MeowEncoder:Class (NoMethodError) 这是怎么回事 我做了一些改进 class MeowEncoder def encode(n) toBianry(?n) puts ""

我对ruby是新手。我尝试了一个简单的方法(带参数)调用

它只是传递参数并将其打印出来。但终端机总是给我这样的错误

: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
class MeowEncoder
def编码(n)
托比安利(?n)
放置“”
结束
托比纳里酒店(n)
如果n<2
印刷品
其他的
托比纳里(n/2)
打印%2
结束
结束
结束
o=MeowEncoder.new
打印“请输入您想要的内容:”
s=gets.chomp()
s、 每个字符{| c | o.encode(c)}这不起作用
o、 托比纳里(212)#这很管用

我在这里做了一些改进。我尝试将字符转换为ASCII值,然后再转换为二进制形式。我可以让托比纳里单曲发挥作用。但是编码方法也给了我同样的错误。发生了什么事?

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

MeowEncoder.new.method(s)

另外,
method
是方法的坏名称。它将导致一个.

在Sergio的答案上展开,如果您确实想要在类上定义方法,有几种方法可以实现这一点,但最简单的方法是在方法定义前面加上
self
,如下所示:

def self.method(c)
  puts c
end
这将允许您以当前的方式调用该方法

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

def MeowEncoder.method(c)
  puts c
end

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

而不是每个字符使用每个字节,并且不需要编码方法

s.each_byte{|c| o.toBinary(c)}

嘿,谢谢你。我做了一些改进。但错误再次发生。介意帮我吗?你有个打字错误-
toBianry
没关系,我知道现在发生了什么。只是一个打字错误。。感谢您用一行代码编写一个脚本:
putself
,运行它时您将获得“main”。将那行
放入self.class
中,您将得到“Object”。看起来您在
encode
方法中使用了
toBianry
。这是您的脚本中的错误还是您的帖子中的错误?非常感谢您提供的额外知识
s.each_byte{|c| o.toBinary(c)}
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)