为了账号安全,请及时绑定邮箱和手机立即绑定

ruby语法学习层面的先见之明

标签:
Ruby

看了几天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,jimmy

5.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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消