看了几天ruby,发现c#中很多一直被称道的语法特性,ruby早在几年前就有了:
1.c#中的params关键字
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Sum());
Console.WriteLine(Sum(3,6));
Console.Read();
}
static int Sum(params int[] nums)
{
int _result = 0;
foreach (int item in nums)
{
_result += item;
}
return _result;
}
}对应的ruby版本:
def sum(*num)
numSum = 0
num.each { |i| numSum+=i }
return numSum
end
puts sum()
puts sum(3,6)2.c#中的缺省参数(据说从4.0才开始支持,但ruby早就有了)
def sum( a, b=5 ) a+b end puts sum(3,6) puts sum(3)
3.c#中的匿名方法
List<int> lst = new List<int>() { 1, 2, 3, 4, 5 };
lst.ForEach((i) => { Console.WriteLine(i); });ruby中的类似语法:
(1..5).each{|x| puts x}4.c#中的delegate与action
class Program
{
static void Main(string[] args)
{
Action<string> a = new Action<string>(HelloWorld);
a("jimmy");
Console.ReadKey();
}
static void HelloWorld(string name)
{
Console.WriteLine("hello,{0}", name);
}
}ruby中的类似语法:
def action(method,name) #相当于c#中的action声明部分
method.call(name)
end
helloWorld = proc{|name| puts "hello,#{name}"} #被action调用的方法体
action(helloWorld,"jimmy"); #通过action,调用helloWorld方法,输出 hello,jimmy5.c#中的扩展方法
class Program
{
static void Main(string[] args)
{
int[] arr = new int[] { 1, 2, 3, 4, 5 };
arr.NewMethod();
Console.ReadKey();
}
}
public static class ExtendUtils
{
public static void NewMethod(this Array arr)
{
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
}ruby中的扩展方法更强大:
class Array
def NewMethod
for i in 0...size
yield(self[i])
end
end
end
arr = [1,2,3,4,5]
arr.NewMethod{|x| print x ,"\n"};
puts "*******************************"
arr.NewMethod{|x| print x * x ,"\n"};点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦