精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-03
最后修改:2009-05-03
他说Ruby是弱类型,然后不断拿他的嵌入式开发经验挖苦我。 问题是,至少谷歌的结果和我以前看过的一些文章告诉我Ruby是强类型的。 引用 某前辈 12:15:52 这叫运行期决定变量类型.明白 某前辈 12:16:09 因为你没有c,c++或是java基础.所以对强与弱你分不清楚 引用 我 12:04:15 要区分对象可变和对象的引用可变,两种概念。 我 12:04:36 php就是弱类型,因为它的对象可以自动转换的,Ruby不行。 我 12:05:02 所以php可以 a = "123" + 3 # 结果 126 我 12:05:08 但是Ruby和Python不行。 某前辈 12:05:22 呵呵.是你不懂吧? 我 12:05:32 http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-GB%3Aofficial&hs=zBT&newwindow=1&q=ruby+strong+type&btnG=Search 我 12:05:45 自己Google,我找不到地方说Ruby是弱类型的。 某前辈 12:05:52 a = "abc" p a >> "abc" a =1 p a >> 1 我 12:06:00 引用变了,谢谢。 我 12:06:18 但是php可以把"123"当123来用。 我 12:06:26 Ruby不行。 某前辈 12:06:49 那可能是一个陷阱 我 12:06:51 各位大哥,Google一下吧,辩论这个没有意义。 我 12:07:14 区分一下动态语言和弱类型语言的差别就好。 某前辈 12:07:15 可能你没有学过c 某前辈 12:07:24 对这个东东的理解还有一些误区 引用 某前辈 12:25:12 那它有没有举例说明 x=124 p "hello #{x}" 这个例子呢? 我 12:27:28 x被转换成字符串了。 某前辈 12:27:41 这都知道.牛 我 12:29:30 在讽刺之余,可以解释一下你想表达的意思吗? 某前辈 12:30:21 php自动把字符转换成数字这是一个陷阱并不能拿它来和弱类型说事 某前辈 12:32:01 在c,c++,java,delphi....等等语言中.变量申明的是什么类型就是什么类型.使用的时候也要跟着一致 动态语言中的变量可以不申明就使用.运行期决定类型. 根据我有限的C基础,我觉得 a = "abc" 和 a = 1 这种,感觉就是两次声明,但是用了同一个变量罢了,不能因此就说Ruby是弱类型的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-03
额,duck type..
|
|
返回顶楼 | |
发表时间:2009-05-03
Ruby是强类型的
C语言是典型的弱类型,某一个内存区域存放的对象究竟是什么,可以以不同方式进行解释,例如一个integer,你也可以把它当作指针,或者当作数组的第一个成员之类的 象Ruby这类强类型语言,某一块内存区域存放的如果是一个Fixnum,那么它决不会是,决不可能解释成为Bignum或者String或者其他什么对象 至于a=1等一下变成a="234",不是因为对同一块内存区域的解释从1变成了"234",而是因为a指向了另外一个对象. |
|
返回顶楼 | |
发表时间:2009-05-03
静态类型定义语言
关于一般的动态语言,例如Ruby、python此类语言都是强类型语言,他们所使用的类型不能在运行过程中变化。而看似“强”的C语言其实是个典型的弱类型,在C语言中,其实只有地址和数据两个概念,任何对数据的使用,你都可以强制取数据长度从而发生类型的变化。 这个其实是个概念问题。 非常感谢相关讨论,特别是那个前辈的话,分清楚应用和类型、明确概念。至于duck编程,个人感觉很好用,不过好像和这里的讨论还是不太符合的。如果在Ruby中"123"+3可以使用,那应该是String里面添加的相关支持(当然这里应该是程序员后期添加的)。 |
|
返回顶楼 | |
发表时间:2009-05-04
最后修改:2009-05-04
你们这些概念那里来的?
引用 可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',然后可以把它看成整数 123,而不需要显示转换。
根本就不是强弱类型的含义所在,因为字符串"123"和整数123不可能是相同的内容,这只是一个简单的转换而已,就算强类型的语言照样可以这么做: class String def +(obj) ""<<self<<obj.to_s end end "123"+1 => "1231" 如果举个C语言的例子,假设我有一个指针但是这个指针的值如果是0x8f8988,这个指针可能是一个数组的开头,那么我完全可以做两件事: 1. 把它当作指针,用*操作得到这个数组的成员 2. 把它当作整数,用加减乘除进行运算 它们运算的是同一个值 |
|
返回顶楼 | |
发表时间:2009-05-04
potian 写道 你们这些概念那里来的?
引用 可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',然后可以把它看成整数 123,而不需要显示转换。
根本就不是强弱类型的含义所在,因为字符串"123"和整数123不可能是相同的内容,这只是一个简单的转换而已,就算强类型的语言照样可以这么做: class String def +(obj) ""<<self<<obj.to_s end end "123"+1 => "1231" 如果举个C语言的例子,假设我有一个指针但是这个指针的值如果是0x8f8988,这个指针可能是一个数组的开头,那么我完全可以做两件事: 1. 把它当作指针,用*操作得到这个数组的成员 2. 把它当作整数,用加减乘除进行运算 它们运算的是同一个值 学习了,原来是这样。 |
|
返回顶楼 | |
发表时间:2009-05-04
我记得ruby的广告语中不是有这样一句么? 如果你喜欢lisp却不习惯满篇的括号...
抛开那些深奥的计算机理论, 我对lisp里变量的赋值是这样理解的: 变量名就是符号, 而符号本天成, 妙手偶得之, 信手拈来一个符号, 赋与它一个有意义的值(非nil), 这样看起来符号可以随意改变类型了. 至于类型的强弱, 是该讨论变量还是该讨论变量所指向的值呢? |
|
返回顶楼 | |
发表时间:2009-05-04
看一下ruby 的内核源代码就知道了。
|
|
返回顶楼 | |
发表时间:2009-05-06
是强类型的,如果ruby不是,那么c++也不是。能不能自动转换并不能说明是强是弱。
如c++类 class A { int v; public: A(int v):v(v){} operator int() { return v; } }; //那么我们也可以使用 cout<<(3+A(4))<<endl; 输出7 类A通过定义隐式的转换成了int 因为你的那位牛人一直接触嵌入式,用的是C语言,不具有面对对象的许多高级特性,所以造成了误解。 ruby和c++一样,不定义其转换方法是无法直接使用的。 |
|
返回顶楼 | |
发表时间:2009-05-14
看看strong type和weak type, 以及static type和dynamic type的区别.
|
|
返回顶楼 | |