【问题标题】:Not able to get result for def using ruby on mac osx在 mac osx 上使用 ruby​​ 无法获得 def 的结果
【发布时间】:2017-02-19 07:38:09
【问题描述】:

这只是我创建的一个示例方法,用于在 Mac OSX 10.12 上使用 Ruby 进行测试,但我没有得到想要的输出:有人可以建议吗?我尝试使用括号和不使用()来获得结果。它甚至不会抛出任何错误。

def hi
puts "Hello World"    
End    
hi    
hi()    
hi("Hello Matz")`

【问题讨论】:

    标签: ruby methods


    【解决方案1】:

    试试这个:

    def hi 
      puts "Hello World"
    end
    
    hi
    hi()
    

    还有这个:

    def greet(greeting)
      puts greeting
    end
    
    greet("Hello Matz")
    

    注意这一行:

    hi("Hello Matz")`
    

    你在末尾有一个勾号,所以这是一个错误:

    1.rb:5: syntax error, unexpected tXSTRING_BEG, expecting end-of-input
    

    它甚至不会抛出任何错误。

    那么你没有运行那个程序。

    我建议你打开一个终端窗口(Applications/Utilities/Terminal.app),然后输入:

    $ vimtutor
    

    vim 是 Mac 附带的免费计算机编程编辑器。完成教程并学习如何使用 vim。要运行 ruby​​ 程序,您需要将代码输入到文件中,然后将其另存为 my_prog.rb。然后你需要将该文件交给 ruby​​ 来执行它。你像这样执行一个 ruby​​ 程序:

    $ ruby my_prog.rb
    

    您可以像这样为所有 ruby​​ 程序创建一个目录:

    $ mkdir ruby_programs
    $ cd ruby_programs
    

    要在该目录中创建一个新文件,请使用 vim:

    ~/ruby_programs$ vi my_prog.rb
    

    输入完代码后,保存文件,这将使您回到终端的提示符处,然后您可以运行您的程序:

    ~/ruby_programs$ ruby my_prog.rb
    

    一旦您熟悉了 vim,并且对运行 ruby​​ 程序充满信心,请考虑使用生动的粉笔配色方案安装 macvim:

    它比普通的 vim 更好看。

    【讨论】:

    • 向初学者推荐 vim... 认真的吗?
    • 我在 20 只猴子身上测试了 vim。三根香蕉,他们中的两个在一天结束时就能把莎士比亚搞砸
    【解决方案2】:

    尝试编辑您的文件,使其显示为:

    def hi
      puts "Hello World"
    end
    
    hi
    

    需要注意的一些重要区别:defend 都区分大小写。函数定义的内部缩进了两个空格。由于该函数不带参数,因此在第 4 行调用 hi 时不需要括号。

    根据您的文件名,输入命令ruby FILENAME,您应该会看到输出Hello World

    【讨论】:

      【解决方案3】:

      Ruby 关键字区分大小写。您的代码使用了End,您可能想使用end 来标记hi 方法的结束。

      因为Endend 不同(并且End 不是关键字),所以irb 一直等待输入并将其他三行视为hi 方法的一部分。据它所知,它的定义在到达end 关键字(所有非大写字母)之前是不完整的。

      定义方法的正确方法是:

      def hi
        puts "Hello World"
      end
      

      然后您可以使用hihi() 调用它。

      将其称为hi("Hello Matz")(或hi "Hello Matz")会引发ArgumentError 异常并显示消息wrong number of arguments (given 1, expected 0),因为它是使用一个参数调用的,但方法hi 的定义没有指定任何有关参数的内容(根据其定义,hi 方法不接受任何参数)。

      【讨论】:

      • 感谢大家的建议。我错误地输入了“End”,因为它区分大小写。现在我输入了“end”,它工作得非常好。
      • 另一个问题是下面这个: def test(name = "World") puts "Hello #{name.capitalize}!"这个“Hello ##{name.capitalize}”应该提供什么输出?我只能看到“Hello World!”。我不确定“name.capitalize”,它有什么作用?
      • 看看它的documentation。它说:“返回str 的副本,其中第一个字符转换为大写,其余字符转换为小写。”。它对"World" 没有任何影响,因为它已经具有上述大小写。如果您希望整个单词大写,请尝试upcase
      • ~axiac 谢谢!
      猜你喜欢
      • 2013-03-16
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2019-03-24
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多