ruby学习笔记(3)--语法层面的先见之明

简介: 看了几天ruby,发现c#中很多一直被称道的语法特性,ruby早在几年前就有了:  1.c#中的params关键字 class Program { static void Main(string[] args) { Console.

看了几天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"};

目录
相关文章
|
3月前
|
开发者 Ruby
Ruby正则表达式的奥秘:如何用简单的语法构建强大的文本匹配与处理工具?
【8月更文挑战第31天】正则表达式是文本匹配的强大工具,通过简单模式即可实现复杂文本处理。作为动态、面向对象的语言,Ruby提供了全面的正则表达式支持,涵盖创建、匹配、替换及分割等功能。本文通过示例代码介绍如何在Ruby中使用正则表达式进行文本匹配,并分享了编写正则表达式的最佳实践,帮助开发者提升文本处理效率与准确性,更好地利用这一工具构建高效系统。
30 0
|
存储 前端开发 JavaScript
前端学 Ruby:熟悉 Ruby 语法
前端学 Ruby:熟悉 Ruby 语法
43 0
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby
|
Ruby Python
红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了。 Ruby是一门在面向对象层面无所不用其极的解释型编程语言。 我们可以把编写Ruby代码看作是一场行为上的艺术,编码就像跳舞一样,Ruby的每一步都很优雅,几乎没有一步是多余的。
红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
|
存储 对象存储 Ruby
Ruby Programming | 连载 02 - Ruby 语法基础
Ruby Programming | 连载 02 - Ruby 语法基础