Ruby: NoMethodError
Ruby: NoMethodError
class Member
def initialize(name,score)
@name = name.capitalize
@score = score
end
def to_s
"Hello, my name is #{@name} and my score is #{@score}. Make sure to give me a good rating!"
end
end
class Contest
def initialize(title)
@title = title
@members = []
end
def join(user)
@members << user
end
def rate_up
puts "#{@name} just got a rating!"
@score += rand(5)
puts "Now my score is #{@score}. WHEEEEEEEE"
end
def rate_down
puts "#{@name} just got a rating!"
@score -= rand(5)
puts "Now my score is #{@score}.....WTF"
end
def standing
if @score >= 15
puts "I got #{@score}! People love me!"
elsif @score < 15
puts "How did I only get #{@score}? WTF? Yall must be blind."
end
end
def begin
puts "#{@title} is about to begin! There are #{@members.size} participants this year!"
@members.each do |person|
person
end
@members.each do |person|
person.rate_up
person.rate_down
end
@members.each do |person|
person.standing
end
end
end
member1 = Member.new("jh", 6)
member2 = Member.new("is", 8)
member3 = Member.new("sw", 8)
member4 = Member.new("yh", 7)
member5 = Member.new("ws", 6)
member6 = Member.new("sm", 5)
contest1 = Contest.new("BestOfSIS")
contest1.join(member1)
contest1.join(member2)
contest1.join(member3)
contest1.join(member4)
contest1.join(member5)
contest1.join(member6)
contest1.begin
当我在终端中 运行 时,我不断收到以下错误:
BestOfSIS is about to begin! There are 6 participants this year!
2.rb:48:in `block in begin': undefined method `rate_up' for #<Member:0x007fa04b8340f8 @name="Jh", @score=6> (NoMethodError)
from 2.rb:47:in `each'
from 2.rb:47:in `begin'
from 2.rb:73:in `<main>'
所以我猜这个方法有问题 'rate_up' 但我不知道是什么。
另一个问题:我可以初始化“@members”数组并在 class 'Member' 下定义 'join' 方法,而不是 class 'Contest'?
提前致谢!
rate_up 在竞赛 class 中,您在成员 class 上调用它,因为@members 是成员 class 的集合。如果将该方法移至 Member class,您的代码将起作用。
关于你的第一个问题,方法 rate_up
、rate_down
和 standing
有问题:它们是 Contest
class 的成员,然后您尝试将它们应用于 Member
个实例。只需将它们移动到 Member
就可以了。
对于第二个问题,您可以在 Member 下定义 members
数组和 join
方法,但您必须将 members
设为 class 属性( @@members
) 所以所有成员都共享。
可以,但不推荐,因为您不能同时进行两场比赛。另外,在这种情况下,概念的分离是不好的,因为成员应该只担心自己而不应该担心比赛。
希望这很清楚并能回答您的问题。
您的会员 class 应该是
class Member
def initialize(name,score)
@name = name.capitalize
@score = score
end
def to_s
"Hello, my name is #{@name} and my score is #{@score}. Make sure to give me a good rating!"
end
def rate_up
puts "#{@name} just got a rating!"
@score += rand(5)
puts "Now my score is #{@score}. WHEEEEEEEE"
end
def rate_down
puts "#{@name} just got a rating!"
@score -= rand(5)
puts "Now my score is #{@score}.....WTF"
end
def standing
if @score >= 15
puts "I got #{@score}! People love me!"
elsif @score < 15
puts "How did I only get #{@score}? WTF? Yall must be blind."
end
end
end
你的比赛 class 应该是
class Contest
def initialize(title)
@title = title
@members = []
end
def join(user)
@members << user
end
def begin
puts "#{@title} is about to begin! There are #{@members.size} participants this year!"
@members.each do |person|
person
end
@members.each do |person|
person.rate_up
person.rate_down
end
@members.each do |person|
person.standing
end
end
end
现在
member1 = Member.new("jh", 6)
member2 = Member.new("is", 8)
member3 = Member.new("sw", 8)
member4 = Member.new("yh", 7)
member5 = Member.new("ws", 6)
member6 = Member.new("sm", 5)
contest1 = Contest.new("BestOfSIS")
contest1.join(member1)
contest1.join(member2)
contest1.join(member3)
contest1.join(member4)
contest1.join(member5)
contest1.join(member6)
contest1.begin
它正在输出
irb(main):127:0> member1 = Member.new("jh", 6)
=> #<Member:0x007f78f175e5d8 @name="Jh", @score=6>
irb(main):128:0> member2 = Member.new("is", 8)
=> #<Member:0x007f78f17428d8 @name="Is", @score=8>
irb(main):129:0> member3 = Member.new("sw", 8)
=> #<Member:0x007f78f1729090 @name="Sw", @score=8>
irb(main):130:0> member4 = Member.new("yh", 7)
=> #<Member:0x007f78f1706f68 @name="Yh", @score=7>
irb(main):131:0> member5 = Member.new("ws", 6)
=> #<Member:0x007f78f16dd078 @name="Ws", @score=6>
irb(main):132:0> member6 = Member.new("sm", 5)
=> #<Member:0x007f78f16b7710 @name="Sm", @score=5>
irb(main):133:0>
irb(main):134:0* contest1 = Contest.new("BestOfSIS")
=> #<Contest:0x007f78f16967b8 @title="BestOfSIS", @members=[]>
irb(main):135:0>
irb(main):136:0* contest1.join(member1)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>]
irb(main):137:0> contest1.join(member2)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>]
irb(main):138:0> contest1.join(member3)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>]
irb(main):139:0> contest1.join(member4)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>]
irb(main):140:0> contest1.join(member5)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>, #<Member:0x007f78f16dd078 @name="Ws", @score=6>]
irb(main):141:0> contest1.join(member6)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>, #<Member:0x007f78f16dd078 @name="Ws", @score=6>, #<Member:0x007f78f16b7710 @name="Sm", @score=5>]
irb(main):142:0>
irb(main):143:0* contest1.begin
BestOfSIS is about to begin! There are 6 participants this year!
Jh just got a rating!
Now my score is 10. WHEEEEEEEE
Jh just got a rating!
Now my score is 9.....WTF
Is just got a rating!
Now my score is 12. WHEEEEEEEE
Is just got a rating!
Now my score is 9.....WTF
Sw just got a rating!
Now my score is 11. WHEEEEEEEE
Sw just got a rating!
Now my score is 7.....WTF
Yh just got a rating!
Now my score is 10. WHEEEEEEEE
Yh just got a rating!
Now my score is 6.....WTF
Ws just got a rating!
Now my score is 10. WHEEEEEEEE
Ws just got a rating!
Now my score is 9.....WTF
Sm just got a rating!
Now my score is 9. WHEEEEEEEE
Sm just got a rating!
Now my score is 6.....WTF
How did I only get 9? WTF? Yall must be blind.
How did I only get 9? WTF? Yall must be blind.
How did I only get 7? WTF? Yall must be blind.
How did I only get 6? WTF? Yall must be blind.
How did I only get 9? WTF? Yall must be blind.
How did I only get 6? WTF? Yall must be blind.
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=9>, #<Member:0x007f78f17428d8 @name="Is", @score=9>, #<Member:0x007f78f1729090 @name="Sw", @score=7>, #<Member:0x007f78f1706f68 @name="Yh", @score=6>, #<Member:0x007f78f16dd078 @name="Ws", @score=9>, #<Member:0x007f78f16b7710 @name="Sm", @score=6>]
class Member
def initialize(name,score)
@name = name.capitalize
@score = score
end
def to_s
"Hello, my name is #{@name} and my score is #{@score}. Make sure to give me a good rating!"
end
end
class Contest
def initialize(title)
@title = title
@members = []
end
def join(user)
@members << user
end
def rate_up
puts "#{@name} just got a rating!"
@score += rand(5)
puts "Now my score is #{@score}. WHEEEEEEEE"
end
def rate_down
puts "#{@name} just got a rating!"
@score -= rand(5)
puts "Now my score is #{@score}.....WTF"
end
def standing
if @score >= 15
puts "I got #{@score}! People love me!"
elsif @score < 15
puts "How did I only get #{@score}? WTF? Yall must be blind."
end
end
def begin
puts "#{@title} is about to begin! There are #{@members.size} participants this year!"
@members.each do |person|
person
end
@members.each do |person|
person.rate_up
person.rate_down
end
@members.each do |person|
person.standing
end
end
end
member1 = Member.new("jh", 6)
member2 = Member.new("is", 8)
member3 = Member.new("sw", 8)
member4 = Member.new("yh", 7)
member5 = Member.new("ws", 6)
member6 = Member.new("sm", 5)
contest1 = Contest.new("BestOfSIS")
contest1.join(member1)
contest1.join(member2)
contest1.join(member3)
contest1.join(member4)
contest1.join(member5)
contest1.join(member6)
contest1.begin
当我在终端中 运行 时,我不断收到以下错误:
BestOfSIS is about to begin! There are 6 participants this year!
2.rb:48:in `block in begin': undefined method `rate_up' for #<Member:0x007fa04b8340f8 @name="Jh", @score=6> (NoMethodError)
from 2.rb:47:in `each'
from 2.rb:47:in `begin'
from 2.rb:73:in `<main>'
所以我猜这个方法有问题 'rate_up' 但我不知道是什么。
另一个问题:我可以初始化“@members”数组并在 class 'Member' 下定义 'join' 方法,而不是 class 'Contest'?
提前致谢!
rate_up 在竞赛 class 中,您在成员 class 上调用它,因为@members 是成员 class 的集合。如果将该方法移至 Member class,您的代码将起作用。
关于你的第一个问题,方法 rate_up
、rate_down
和 standing
有问题:它们是 Contest
class 的成员,然后您尝试将它们应用于 Member
个实例。只需将它们移动到 Member
就可以了。
对于第二个问题,您可以在 Member 下定义 members
数组和 join
方法,但您必须将 members
设为 class 属性( @@members
) 所以所有成员都共享。
可以,但不推荐,因为您不能同时进行两场比赛。另外,在这种情况下,概念的分离是不好的,因为成员应该只担心自己而不应该担心比赛。
希望这很清楚并能回答您的问题。
您的会员 class 应该是
class Member
def initialize(name,score)
@name = name.capitalize
@score = score
end
def to_s
"Hello, my name is #{@name} and my score is #{@score}. Make sure to give me a good rating!"
end
def rate_up
puts "#{@name} just got a rating!"
@score += rand(5)
puts "Now my score is #{@score}. WHEEEEEEEE"
end
def rate_down
puts "#{@name} just got a rating!"
@score -= rand(5)
puts "Now my score is #{@score}.....WTF"
end
def standing
if @score >= 15
puts "I got #{@score}! People love me!"
elsif @score < 15
puts "How did I only get #{@score}? WTF? Yall must be blind."
end
end
end
你的比赛 class 应该是
class Contest
def initialize(title)
@title = title
@members = []
end
def join(user)
@members << user
end
def begin
puts "#{@title} is about to begin! There are #{@members.size} participants this year!"
@members.each do |person|
person
end
@members.each do |person|
person.rate_up
person.rate_down
end
@members.each do |person|
person.standing
end
end
end
现在
member1 = Member.new("jh", 6)
member2 = Member.new("is", 8)
member3 = Member.new("sw", 8)
member4 = Member.new("yh", 7)
member5 = Member.new("ws", 6)
member6 = Member.new("sm", 5)
contest1 = Contest.new("BestOfSIS")
contest1.join(member1)
contest1.join(member2)
contest1.join(member3)
contest1.join(member4)
contest1.join(member5)
contest1.join(member6)
contest1.begin
它正在输出
irb(main):127:0> member1 = Member.new("jh", 6)
=> #<Member:0x007f78f175e5d8 @name="Jh", @score=6>
irb(main):128:0> member2 = Member.new("is", 8)
=> #<Member:0x007f78f17428d8 @name="Is", @score=8>
irb(main):129:0> member3 = Member.new("sw", 8)
=> #<Member:0x007f78f1729090 @name="Sw", @score=8>
irb(main):130:0> member4 = Member.new("yh", 7)
=> #<Member:0x007f78f1706f68 @name="Yh", @score=7>
irb(main):131:0> member5 = Member.new("ws", 6)
=> #<Member:0x007f78f16dd078 @name="Ws", @score=6>
irb(main):132:0> member6 = Member.new("sm", 5)
=> #<Member:0x007f78f16b7710 @name="Sm", @score=5>
irb(main):133:0>
irb(main):134:0* contest1 = Contest.new("BestOfSIS")
=> #<Contest:0x007f78f16967b8 @title="BestOfSIS", @members=[]>
irb(main):135:0>
irb(main):136:0* contest1.join(member1)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>]
irb(main):137:0> contest1.join(member2)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>]
irb(main):138:0> contest1.join(member3)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>]
irb(main):139:0> contest1.join(member4)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>]
irb(main):140:0> contest1.join(member5)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>, #<Member:0x007f78f16dd078 @name="Ws", @score=6>]
irb(main):141:0> contest1.join(member6)
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=6>, #<Member:0x007f78f17428d8 @name="Is", @score=8>, #<Member:0x007f78f1729090 @name="Sw", @score=8>, #<Member:0x007f78f1706f68 @name="Yh", @score=7>, #<Member:0x007f78f16dd078 @name="Ws", @score=6>, #<Member:0x007f78f16b7710 @name="Sm", @score=5>]
irb(main):142:0>
irb(main):143:0* contest1.begin
BestOfSIS is about to begin! There are 6 participants this year!
Jh just got a rating!
Now my score is 10. WHEEEEEEEE
Jh just got a rating!
Now my score is 9.....WTF
Is just got a rating!
Now my score is 12. WHEEEEEEEE
Is just got a rating!
Now my score is 9.....WTF
Sw just got a rating!
Now my score is 11. WHEEEEEEEE
Sw just got a rating!
Now my score is 7.....WTF
Yh just got a rating!
Now my score is 10. WHEEEEEEEE
Yh just got a rating!
Now my score is 6.....WTF
Ws just got a rating!
Now my score is 10. WHEEEEEEEE
Ws just got a rating!
Now my score is 9.....WTF
Sm just got a rating!
Now my score is 9. WHEEEEEEEE
Sm just got a rating!
Now my score is 6.....WTF
How did I only get 9? WTF? Yall must be blind.
How did I only get 9? WTF? Yall must be blind.
How did I only get 7? WTF? Yall must be blind.
How did I only get 6? WTF? Yall must be blind.
How did I only get 9? WTF? Yall must be blind.
How did I only get 6? WTF? Yall must be blind.
=> [#<Member:0x007f78f175e5d8 @name="Jh", @score=9>, #<Member:0x007f78f17428d8 @name="Is", @score=9>, #<Member:0x007f78f1729090 @name="Sw", @score=7>, #<Member:0x007f78f1706f68 @name="Yh", @score=6>, #<Member:0x007f78f16dd078 @name="Ws", @score=9>, #<Member:0x007f78f16b7710 @name="Sm", @score=6>]