zoukankan      html  css  js  c++  java
  • ruby学习笔记(3)语法层面的先见之明

    看了几天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"};
    
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    两种存储思路
    越来越浅
    我了解的前端史
    关于称赞小孩
    怎么写递归
    Python笔记(十八):协程asyncio
    网络协议笔记(一):HTTP协议基础知识
    Linux笔记(三):常用命令
    算法笔记(九):二分查找
    数据结构笔记(二):栈、队列
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1667428.html
Copyright © 2011-2022 走看看