我是Ruby的新手,所以如果这听起来很愚蠢,请道歉.

我似乎不知道如何在同一个文件中编写"主"代码和方法(类似于C).最后我得到了一个"main"文件,它加载了一个包含所有方法的单独文件.我很感激任何关于这方面的指导.

我发现了下面的帖子,但我不明白:

虽然这没什么大不了的,但在同一个文件中查看所有相关代码更容易.非常感谢.

[-编辑-]

感谢所有回应的人——事实证明,您只需要定义代码上方的所有方法.下面是一个例子:

def callTest1
    puts "in test 1"
end

def callTest2
    puts "in test 2" 
end

callTest1
callTest2

我认为这是有道理的,因为Ruby需要事先知道所有的方法.这与C不同,C中有一个头文件,它清楚地列出了可用的函数,因此可以在main()函数下定义它们

再次感谢所有回应的人.

推荐答案

@Hauleth的回答是正确的:Ruby中没有main方法或 struct .我只想在这里提供一个稍微不同的观点和一些解释.

当执行ruby somefile.rb时,Ruby将执行somefile.rb中的所有代码.因此,如果您有一个非常小的项目,并且希望它在单个文件中独立,那么这样做绝对没有错:

# somefile.rb

class MyClass
  def say_hello
    puts "Hello World"
  end
end

def another_hello
  puts "Hello World (from a method)"
end

c = MyClass.new
c.say_hello
another_hello

并不是前两个块没有执行,只是在实际使用相应的类/方法之前,您看不到效果.

if __FILE__ == $0位只是一种阻止代码的方法,只有在直接从命令行运行此文件时,才需要运行这些代码.__FILE__

如果想直接执行代码,可以添加shebang

#!/usr/bin/env ruby

# rest of somefile.rb

并使其具有chmod +x somefile.rb可执行性(可选地重命名它,但不使用.rb扩展名).这并不能真正改变你的处境.if __FILE__ == $0仍然有效,而且可能仍然没有必要.

Edit

正如@steenslag正确指出的,Ruby中的顶级作用域是一个名为mainObject.不过,它的行为有点古怪:

irb
>> self
=> main
>> self.class
=> Object
>> main
NameError: undefined local variable or method `main' for main:Object
from (irb):8

在你开始深入研究这门语言之前,不要担心这个问题.如果你想更多地了解这类知识,Metaprogramming Ruby是一本很棒的读物:)

Ruby相关问答推荐

Ruby - 使用索引值识别和更新数组中的重复项

使用 Sorbet RBI 时需要 Elem

在 Ruby 中,如何编写一个可以与 &:symbol 一起使用的简单方法?

生成带有小写字母和数字的唯一随机字符串

什么是 '?-mix' 在 Ruby 正则表达式中

在 Ruby 中,如何确定字符串是否不在数组中?

在 Ruby 中覆盖 == 运算符

从href html标签中提取带有Ruby中nokogiri的链接(URL)?

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

Ruby 中的 Fail vs. raise:我们真的应该相信风格指南吗?

Ruby 中的排序稳定吗?

如何在Ruby中返回两个字符串之间的字符串的子字符串?

如何从最后一个元素开始遍历数组?

Ruby 与计算机科学相关的 yield 特性

如何在 Ruby 中创建私有类常量

如何在 Ruby 脚本中运行 Rake 任务?

if语句末尾带有then有什么区别?

不能在windows上安装thin

Ruby:如何计算一个字符串在另一个字符串中出现的次数?

查找与给定条件匹配的元素的索引