两个快速的Ruby问题
我定义了这个包含数组的类,但在为它实现两个快速的Ruby问题,ruby,Ruby,我定义了这个包含数组的类,但在为它实现每个方法时遇到问题 第二部分是:如何重写下面的代码,这样就没有return语句了 def define number#@sing是我的另一个类的成员 如果(@sign==:负数&&number0),则返回true 如果(@sign==:非负&&number>=0),则返回true 如果(@sign==:非正&&number您只需要使用给定的块来处理此问题,则为true?: class Number include Enumerable def
每个
方法时遇到问题
第二部分是:如何重写下面的代码,这样就没有
return
语句了
def define number#@sing是我的另一个类的成员
如果(@sign==:负数&&number<0),则返回true
如果(@sign==:正数&&number>0),则返回true
如果(@sign==:非负&&number>=0),则返回true
如果(@sign==:非正&&number您只需要使用给定的块来处理此问题,则为true?
:
class Number
include Enumerable
def initialize
@array = []
end
def each
if (block_given?)
@array.each do |number|
yield(number)
end
else
@array.each
end
end
end
至于另一件事,请记住,你可以浓缩你的逻辑:
def test?
(...) || (...) || (...)
end
由于您返回的是true
,因此只需返回每一位逻辑的计算值即可。请记住,Ruby中有一个隐式return
,因此不需要请求它,除非您正在执行比计算二进制条件更复杂的操作
考虑到您基本上是如何针对各种情况进行测试的,最好将其重写为case
语句:
def determine(number)
case (@sign)
when :negative
number < 0
when :positive
number > 0
when :non_negative
number >= 0
when :non_positive
number <= 0
else
true
end
end
def确定(数字)
大小写(@符号)
时间:否定
数量<0
时间:肯定
数字>0
时间:非负
数字>=0
时间:非正
数字您只需使用给定的块来处理此问题?
:
class Number
include Enumerable
def initialize
@array = []
end
def each
if (block_given?)
@array.each do |number|
yield(number)
end
else
@array.each
end
end
end
至于另一件事,请记住,你可以浓缩你的逻辑:
def test?
(...) || (...) || (...)
end
由于您返回的是true
,因此只需返回每一位逻辑的计算值即可。请记住,Ruby中有一个隐式return
,因此不需要请求它,除非您正在执行比计算二进制条件更复杂的操作
考虑到您基本上是如何针对各种情况进行测试的,最好将其重写为case
语句:
def determine(number)
case (@sign)
when :negative
number < 0
when :positive
number > 0
when :non_negative
number >= 0
when :non_positive
number <= 0
else
true
end
end
def确定(数字)
大小写(@符号)
时间:否定
数量<0
时间:肯定
数字>0
时间:非负
数字>=0
时间:非正
数字通常最好只问一个具体问题。你的第二个问题在中有答案。此外,“我如何重写”问题也应该在中提出。类似于@range
的名称比@sign
更好。通常最好只问一个具体问题。你的第二个问题在中有答案。此外,“我如何重写”问题应在上提问。类似于@range
的名称比@sign
更好。或者您可以使用定义每个(&block);@array.each(&block);end
@engineersmnky如果你想把它链接起来,是的,这应该会起作用。这会暴露出更多的内部工作,这样你就可以添加到它上面。你的答案更清楚它是如何工作的。我的意思是,如果我真的想混淆OP,我会发布一个扩展了可转发的并使用定义的答案egators
。或者您可以只使用定义每个(&block);@array.each(&block);end
@engineersmnky如果你想把它链接起来,是的,这应该会起作用。这会暴露出更多的内部工作,这样你就可以添加到它上面。你的答案更清楚它是如何工作的。我的意思是,如果我真的想混淆OP,我会发布一个扩展了可转发的并使用定义的答案egators
。