Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 on rails 如何将大型类的私有方法移出单个文件_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何将大型类的私有方法移出单个文件

Ruby on rails 如何将大型类的私有方法移出单个文件,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个相当大的类,有很多功能,由以下部分组成: 3公共方法 20多种私人方法 零状态(无属性) 将我的类拆分为多个文件,同时将3个公共方法保留在初始文件中,并且不使私有实现可访问整个应用程序的最佳选项是什么?如评论中所建议的,您可以重新打开该类并只定义私有方法 或者,您可以定义一个模块并将其包含在类中: module FooPrivate private def greet 'hello' end end class Foo include FooPrivate

我有一个相当大的类,有很多功能,由以下部分组成:

  • 3公共方法
  • 20多种私人方法
  • 零状态(无属性)

将我的类拆分为多个文件,同时将3个公共方法保留在初始文件中,并且不使私有实现可访问整个应用程序的最佳选项是什么?

如评论中所建议的,您可以重新打开该类并只定义私有方法

或者,您可以定义一个模块并将其包含在类中:

module FooPrivate
  private

  def greet
    'hello'
  end
end

class Foo
  include FooPrivate

  def hello
    greet
  end
end
上述行动:

irb> Foo.new.greet
NoMethodError (private method `greet' called for #<Foo:0x00007f83ba04bd58>)
irb> Foo.new.hello
=> "hello"
irb>Foo.new.greet
NoMethodError(为#调用的私有方法'greet')
irb>Foo.new.hello
=>“你好”

整个应用程序将始终具有访问权限,这是ruby。但是你可以用另一种方式来做,用你的公共API定义一个公共模块,它本身包含在一个私有实现中,你可以通过getter/factory/whatevert来获得这个私有实现。公共方法可能会调用私有方法。将后者移动到单独的文件中会使代码更难理解。读卡器必须在两个文件之间跳过。我只是把公共方法放在上面,私有方法放在
private
关键字下面。Ruby类是开放的。只需将实现拆分成几个文件即可。@AlekseiMatiushkin实现详细信息不应引起兴趣,无论它是私有方法还是公共方法。但是,如果出于某种原因我必须深入研究实现,我通常希望/需要所有细节。将方法放在使用它们的地方!将内容移动到另一个文件会降低可读性