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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1667428.html
Copyright © 2011-2022 走看看