- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
Ruby 方法用于捆绑一个或多个重复的语句到一个单元中
Ruby 方法与其他编程语言中的函数类似
Ruby 中的方法名应以小写字母开头。
如果以大写字母作为方法名的开头,Ruby 可能会把它当作常量,从而导致不正确地解析调用
Ruby 方法应在调用之前定义,否则 Ruby 会产生未定义的方法调用异常
Ruby 语言中定义方法的语法格式如下
def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
expr..
end
def method_name
expr..
end
def method_name (var1, var2)
expr..
end
如果方法调用时未传递必需的参数则使用默认值
def method_name (var1=value1, var2=value2)
expr..
end
调用无参数的方法时,只需要使用方法名即可
method_name
调用带参数的方法时,在写方法名时还要带上参数
method_name 25, 30
使用带参数方法最大的缺点是调用方法时需要记住参数个数。 例如,如果向一个接受三个参数的方法只传递了两个参数,Ruby 会显示错误
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def hello( name="World", greet ="Hello" )
puts "in hello method\n#{greet} #{name}\n\n"
end
hello
hello "www.ddkk.com"
hello "www.ddkk.com", "欢迎"
运行范例 »
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb
in hello method
Hello World
in hello method
Hello www.ddkk.com
in hello method
欢迎 www.ddkk.com
Ruby 从方法中返回值有两种方式:
1、 默认返回最后一个表达式的值;
2、 使用return语句显示返回;
Ruby 中的每个方法默认都会返回一个值。这个返回的值是最后一个语句的值
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def hello( name="World", greet ="Hello" )
"#{greet} #{name}\n"
end
puts hello
puts hello( "www.ddkk.com")
puts hello("www.ddkk.com", "欢迎")
运行范例 »
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb
Hello World
Hello www.ddkk.com
欢迎 www.ddkk.com
在调用这个方法时,将返回最后一个声明的变量 9
Ruby 中的 return 语句用于从 Ruby 方法中显示返回一个或多个值
return [expr[,' expr...]]
如果给出超过两个的表达式,包含这些值的数组将是返回值 如果未给出表达式,nil 将是返回值
return
或
return 12
或
return 1,2,3
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def intro_self
return "Hello", "www.ddkk.com", "and", "World"
end
greeting = intro_self
puts greeting
运行范例 »
运行以上 Ruby 范例,输出结果如下
Hello
www.ddkk.com
and
World
如果声明了一个带有两个参数的方法,那么调用该方法时,就必须同时传递两个参数
当参数数量多了之后,这种机制就会显得很臃肿。
幸好,Ruby 允许声明参数数量可变的方法
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def hello( *names )
print "Hello "
for name in names
print name, " "
end
puts "\nnames length is :#{names.length}"
end
hello "Baidu", "Twle", "NetEase", "Sina", "Ali", "Tencent"
puts ""
hello "Python", "Ruby", "Perl", "Scala", "JavaScript"
运行范例 »
上面的范例,我们声明了一个 hello 的方法,它接收接受一个参数 names 但这个参数有点特别,因为它是一个变量参数。这意味着参数可以带有不同数量的变量
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb
Hello Baidu Twle NetEase Sina Ali Tencent
names length is :6
Hello Python Ruby Perl Scala JavaScript
names length is :5
Ruby 语言中,当方法定义在类的外部,方法默认标记为 private 如果方法定义在类中的,则默认标记为 public
方法默认的可见性和 private 标记可通过模块(Module)的 public 或 private 改变。
一般情况下,如果想要访问类的方法时,首先必须实例化类。然后,就可以通过对象访问类的任何成员
Ruby 提供了一种不用实例化即可访问方法的方式
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
class HelloWorld
def reading_charge
end
def HelloWorld.greet
puts "Hello www.ddkk.com"
end
end
HelloWorld.greet
方法return_date 的声明有点特俗,它是通过在类名后跟着一个点号,点号后跟着方法名来声明的
这样定义的方法,我们就可以直接访问,而不需要创建类 HelloWorld 的实例
Accounts.return_date
运行范例 »
运行以上范例,输出结果如下
$ ruby main.rb
Hello www.ddkk.com
alias 语句用于为方法或全局变量起别名。
别名不能在方法主体内定义
即使方法被重写,方法的别名也保持方法的当前定义
1、 为编号的全局变量(\ $
1,\ $
2,...)起别名是被禁止的;
2、 重写内置的全局变量可能会导致严重的问题;
alias 别名 方法名
alias 别名 全局变量
alias foo bar
alias $MATCH $&
上面的代码,我们已经为 bar 定义了别名为 foo,为 $
& 定义了别名为 $
MATCH
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def greeting
puts "Hello www.ddkk.com"
end
alias greeting_ddkk greeting
greeting
puts "-------------------"
greeting_ddkk
运行范例 »
运行以上范例,输出结果如下
$ ruby main.rb
Hello www.ddkk.com
-------------------
Hello www.ddkk.com
undef 语句用于取消方法定义
undef 不能出现在方法主体内
通过使用 undef 和 alias ,类的接口可以从父类独立修改 但请注意,在自身内部方法调用时,它可能会破坏程序
undef 方法名
下面的代码取消名为 hello 的方法定义
undef hello
# !/usr/bin/ruby -w
# -*- encoding:utf-8 -*-
# filename: main.rb
# author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
# Copyright © 2015-2065 www.ddkk.com. All rights reserved.
def greeting
puts "Hello www.ddkk.com"
end
alias greeting_ddkk greeting
greeting
puts "-------------------"
greeting_ddkk
puts "-------------------"
undef greeting
def greeting
puts "Hello DDKK.COM 弟弟快看,程序员编程资料站"
end
greeting
puts "-------------------"
greeting_ddkk
运行范例 »
运行以上范例,输出结果如下
$ ruby main.rb
Hello www.ddkk.com
-------------------
Hello www.ddkk.com
-------------------
Hello DDKK.COM 弟弟快看,程序员编程资料站
-------------------
Hello www.ddkk.com
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!