加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

将Perl转换为Ruby – 模块与类

发布时间:2020-12-16 06:15:50 所属栏目:大数据 来源:网络整理
导读:Perl中的命名空间非常简单,但我似乎无法找到将这个非常简单的Perl类层次结构转换为 Ruby的解决方案. Perl的 LIB / Foo.pm package Foo;use Foo::Bar;sub bar { return Foo::Bar-new()} LIB /富/ Bar.pm package Foo::Barsub baz {} main.pl use Foo;my $foo
Perl中的命名空间非常简单,但我似乎无法找到将这个非常简单的Perl类层次结构转换为 Ruby的解决方案.

Perl的

LIB / Foo.pm

package Foo;

use Foo::Bar;

sub bar {
    return Foo::Bar->new()
}

LIB /富/ Bar.pm

package Foo::Bar

sub baz {}

main.pl

use Foo;
my $foo = Foo->new();
my $bar = $foo->bar();
$bar->baz()

ruby

模块无法实例化,因此这段代码显然不起作用:

LIB / foo.rb

require 'foo/bar.rb'

module Foo    
  def bar
    Foo::Bar.new
  end
end

LIB /富/ bar.rb

module Foo
  class Bar
    def baz
    end
  end
end

main.rb的

require 'lib/foo.rb'
foo = Foo.new
bar = foo.bar
bar.baz

但是尝试将Foo声明为类而不是也不起作用,因为已经有一个名称的模块:

lib/foo.rb:3:in `<top (required)>': Foo is not a class (TypeError)

所以我最终得到:

LIB / foo.rb

module Foo
  class Foo
    ...
  end
end

main.rb的

foo = Foo::Foo.new

这不是我想要的.我觉得我错过了一些非常基本的东西. :)感谢您对此有所了解.

解决方法

在Ruby中,模块和类都可用于提供命名空间分离.事实上,Class是Module的子类,大多数事情都可以用Module做,你也可以用Class做

如果Foo需要是一个类,请将其声明为类,不要将其声明为模块.

例如.

LIB / foo.rb

require 'foo/bar.rb'

class Foo    
  def bar
    Foo::Bar.new
  end
end

LIB /富/ bar.rb

class Foo
  class Bar
    def baz
    end
  end
end

main.rb的

require 'lib/foo.rb'
foo = Foo.new
bar = foo.bar
bar.baz

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读