Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个快速的Ruby问题_Ruby - Fatal编程技术网

两个快速的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