Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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_Scope_Format - Fatal编程技术网

Ruby范围和指南。哪一个更好,为什么?

Ruby范围和指南。哪一个更好,为什么?,ruby,scope,format,Ruby,Scope,Format,我有一个关于Ruby中的作用域的问题。我将粘贴同一脚本的两个版本,两个版本都有效,但其中一个在类的上面引入变量,另一个在类实例和调用之前在下面引入变量。我更喜欢在课堂上与他们一起写作,因为我似乎更容易跟踪课堂上的内容。有什么理由我不能这样做吗 脚本A 脚本B 您希望您的代码按概念依赖性排序,我的意思是;“信息来自何处”和“信息是如何使用的” 在开发过程中,类内容在概念上取决于第一个代码块-该代码块是信息的来源,类是该信息的使用。然后,第二个块的含义取决于(大概)不断变化的类别——同样,信息的来源

我有一个关于Ruby中的作用域的问题。我将粘贴同一脚本的两个版本,两个版本都有效,但其中一个在类的上面引入变量,另一个在类实例和调用之前在下面引入变量。我更喜欢在课堂上与他们一起写作,因为我似乎更容易跟踪课堂上的内容。有什么理由我不能这样做吗

脚本A 脚本B
您希望您的代码按概念依赖性排序,我的意思是;“信息来自何处”和“信息是如何使用的”

在开发过程中,类内容在概念上取决于第一个代码块-该代码块是信息的来源,类是该信息的使用。然后,第二个块的含义取决于(大概)不断变化的类别——同样,信息的来源和使用。因此,在开发过程中,将类定义放在块之间是有意义的

在制作过程中,第二个块的含义取决于第一个块,并且类完全独立于其中任何一个块:它现在是静态的-不变的;你知道它在做什么。所以,这些块需要在一起,类需要在“其他地方”:信息的来源、已知的转换、信息的使用


基本上,一旦完成了这个类,它就是“库代码”,并且总是去“库代码”总是去的地方:看不见。顶部、底部或其他文件。

可以说,这个问题是不相关的,因为类应该在它自己的、单独的文件中。但这一切都取决于作者。谢谢你的编辑,谢谢你的快速回答!我通常会将这两个文件分开,我把它们放在一起,因为它又小又快,我想知道这样小的文件实例是否有S.O.P。再次谢谢你,先生!再次感谢你!你们帮我解决了这件事,真是太棒了。
require 'ipaddress'

puts "What class network?"
network_class = gets.chomp.to_s.downcase
puts "What is the ip?"
ip = gets.chomp.to_s.downcase
puts "How many subnets?"
subnets = gets.chomp.to_i

class TheSubNetter

  def initialize(network_class, ip, subnets)
    @network_class = network_class
    @ip = ip
    @subnets = subnets
  end

  def ip_class
    if @network_class == "c"
      IPAddress "#{@ip}/24"
    elsif @network_class == "b"
      IPAddress "#{@ip}/16"
    elsif @network_class == "a"
      IPAddress "#{@ip}/8"
    else
      "Error!"
    end
  end

  def subnet(ip)
    subnets = ip.split(@subnets)
  end

  def ranges(subnets)
    bcast = subnets.map do |i|
      i.broadcast
    end
    bcast.map do |i|
      [i.first.to_string, i.last.to_string]  
    end
  end

end

get_subd = TheSubNetter.new(network_class, ip, subnets)
address = get_subd.ip_class
subnets = get_subd.subnet(address)
ranges = get_subd.ranges(subnets)
ranges.each do |i|
  puts i[0] + "  =>  " + i[1]
end
require 'ipaddress'

class TheSubNetter

  def initialize(network_class, ip, subnets)
    @network_class = network_class
    @ip = ip
    @subnets = subnets
  end

  def ip_class
    if @network_class == "c"
      IPAddress "#{@ip}/24"
    elsif @network_class == "b"
      IPAddress "#{@ip}/16"
    elsif @network_class == "a"
      IPAddress "#{@ip}/8"
    else
      "Error!"
    end
  end

  def subnet(ip)
    subnets = ip.split(@subnets)
  end

  def ranges(subnets)
    bcast = subnets.map do |i|
      i.broadcast
    end
    bcast.map do |i|
      [i.first.to_string, i.last.to_string]  
    end
  end

end

puts "What class network?"
network_class = gets.chomp.to_s.downcase
puts "What is the ip?"
ip = gets.chomp.to_s.downcase
puts "How many subnets?"
subnets = gets.chomp.to_i

get_subd = TheSubNetter.new(network_class, ip, subnets)
address = get_subd.ip_class
subnets = get_subd.subnet(address)
ranges = get_subd.ranges(subnets)
ranges.each do |i|
  puts i[0] + "  =>  " + i[1]
end