Как разделить код на Ruby, как в коде на C или C ++ - PullRequest
0 голосов
/ 28 марта 2019

Я бы хотел разделить длинный фрагмент кода Ruby на несколько исходных файлов Ruby. В исходный файл C я могу поместить код так:

a.c

switch (n) {
    case 1:
        printf("1\n");
        break;
#include "b.c"
}

b.c

    case 2:
        printf("2\n");
        break;

В Ruby я так не могу:

a.rb

case n
when 1
  puts "1"
load "b.rb" # or include
end

b.rb

when 2
  puts "2"

Как мне написать это в Ruby-коде, как в исходном файле на C?

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Ruby - полностью объектно-ориентированный язык.Даже когда вы пишете код в верхней части файла, он на самом деле запускает в объекте Object.

Самый простой способ фактически разделить явно обязательный процедурный код - это поместитькод в методе где-то еще, так что он получает пространство имен.

Типовое решение для вашего случая:

# a.rb

require_relative 'b'


case condition
when "a"
  puts "a"
when ->(it) { B.handle?(it) }
  B.handle(condition)
end


# b.rb

module B
  def self.handle?(cond)
    "b" === cond
  end

  def self.handle(cond)
    case cond
    when "b"
      puts "we are in b.rb"
    end
  end
end
0 голосов
/ 28 марта 2019

Когда вы используете метод load в ruby, весь файл читается интерпретатором и исполняется им. Но это должен быть правильный синтаксис сам по себе.

Например, вы можете сделать так:

file1.rb:

puts 'I am in file1'

file2.rb:

case condition
when "a"
  load 'file1.rb'
when "b"
  puts 'I am in main file'
end

Но я не рекомендую это делать. Лучше разбить код на значимые классы / модули, а затем при необходимости требовать файлы / включаемые модули.

Ruby имеет отличную поддержку ООП, поэтому вы можете воспользоваться этим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...