、思路方法
Ruby
![](/icons/98104de.gif)
思路方法定义允许为参数设置默认值
![](/icons/98104dou.gif)
不过在带有默认值
![](/icons/98104de.gif)
参数后面不能出现不带有默认值
![](/icons/98104de.gif)
参数(允许 * 和 &)
![](/icons/98104dou.gif)
也就是说下面
![](/icons/98104de.gif)
思路方法定义是不被允许
![](/icons/98104de.gif)
![](/icons/98104dou.gif)
解释时会出现 parse error
![](/icons/98104dou2.gif)
还有
![](/icons/98104yi.gif)
点和 C# 区别
![](/icons/98104de.gif)
是
![](/icons/98104dou.gif)
思路方法定义不能出现在思路方法
![](/icons/98104diaoyong.gif)
![](/icons/98104de.gif)
后面
# parse error
def Display(args1="proshea", args2)
end
# 允许
def Display(args1="proshea", *args2)
end
# 允许
def Display(args1="proshea", &args)
end
Show
# 出现在 Show
的后是![](/icons/98104cuowu.gif)
def Show
end
Ruby 也支持 C# params 这样
![](/icons/98104de.gif)
参数功能
![](/icons/98104dou.gif)
只是 Ruby 用 * 标识罢了
def Display(*args)
pr
%Q~#{args.join("-")}~
end
# proshea-32-WinForm
Display("proshea", 32, "WinForm")
同样
![](/icons/98104de.gif)
![](/icons/98104dou.gif)
Ruby 也有类似于 C# delegate
![](/icons/98104de.gif)
应用
![](/icons/98104dou.gif)
只是更简单
![](/icons/98104dou.gif)
直接用 & 来表示
![](/icons/98104dou.gif)
并且 Ruby 用
![](/icons/98104yi.gif)
个称为 yield
![](/icons/98104de.gif)
关键字来知会解释器执行传入
![](/icons/98104de.gif)
代码块或者说 Proc object(过程对象?)
1def Display(&block)
2
block_given?
3 yield(block)
4
5 pr
%Q~没有传入过程对象~
6 end
7end
8
9def Show
10 pr
%Q~Show 思路方法
~
11end
12
13# 没有传入过程对象
14Display
15# 在 Display 内部
Show 思路方法
16# 注意起始大括号仍然只能和思路方法名在同
行
17Display
{
18 Show
19}
block_given? 是被定义在内部模块 Kernel 当中
![](/icons/98104de.gif)
思路方法
![](/icons/98104dou.gif)
用以表明是否传入了 Proc object
![](/icons/98104dou2.gif)
的后
![](/icons/98104dou.gif)
Ruby 用 yield 通知解释器执行传入
![](/icons/98104de.gif)
Proc
![](/icons/98104dou2.gif)
过程对象也可以带有参数
![](/icons/98104dou.gif)
区别于普通思路方法
![](/icons/98104de.gif)
是过程对象
![](/icons/98104de.gif)
参数是位于
![](/icons/98104yi.gif)
组 | | 的中
![](/icons/98104dou2.gif)
可以使用 Proc object
![](/icons/98104de.gif)
call 思路方法来
![](/icons/98104diaoyong.gif)
带参数
![](/icons/98104de.gif)
过程对象
1
Employee
2 def initialize(username, age, &block)
3 @username, @age, @block = username, age, block
4 end
5
6 def Display(txt)
7 # 虽然 @block 是个例子变量
但在此处
定要加上大括号
8 pr
"#{@block.call(txt)}: #@username-#@age"
9 end
10end
11
12emp = Employee.
("proshea", 32){
13 |txt|
14 txt
15}
16emp.Display("context")
1
延伸阅读
最新评论