V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sethverlo
V2EX  ›  问与答

来聊聊编程语言中那些让你觉得被惊呆了的特性

  •  
  •   sethverlo · 2013-08-29 12:05:16 +08:00 · 5000 次点击
    这是一个创建于 3893 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Python:

    1. if 1 < a < 3

    2. return a, b, c

    3. a, b = b, a

    Ruby:

    1. a.try(:b) # 如果 a == nil 就直接返回 nil 而不会告诉你 nil 没有方法…

    2. a.nil? # 这种带问号的方法

    3. a ||= b # 相当于 if !a.nil? then a = b end
    53 条回复    1970-01-01 08:00:00 +08:00
    timonwong
        1
    timonwong  
       2013-08-29 12:14:24 +08:00   ❤️ 1
    D mixins
    aisk
        2
    aisk  
       2013-08-29 12:16:39 +08:00   ❤️ 1
    saharabear
        3
    saharabear  
       2013-08-29 12:17:14 +08:00
    这种奇怪的东西,我都看过后不记,也不去用,慢慢就不知道了.
    heganj
        4
    heganj  
       2013-08-29 12:31:33 +08:00   ❤️ 1
    66450146
        5
    66450146  
       2013-08-29 12:33:49 +08:00
    ARC
    kunimi
        6
    kunimi  
       2013-08-29 12:36:19 +08:00   ❤️ 2
    Python中的倒序:str[::-1]
    Quora上有一个问题叫:What are some cool Python tricks? - https://www.quora.com/Python-programming-language-1/What-are-some-cool-Python-tricks
    shibo501c
        7
    shibo501c  
       2013-08-29 12:46:53 +08:00
    a.try(:b) 中 y(:b)是个很萌的表情啊
    itaotao
        8
    itaotao  
       2013-08-29 12:50:34 +08:00
    @shibo501c 这是啥?
    shibo501c
        9
    shibo501c  
       2013-08-29 12:52:58 +08:00
    @itaotao 仅仅是楼主例子中的,可以忽略
    oobleck
        10
    oobleck  
       2013-08-29 13:04:10 +08:00
    a ||= b 就是 a = a || b
    zencoding
        11
    zencoding  
       2013-08-29 13:23:00 +08:00
    a:b?c
    这句最惊呆,当其大量出现时,程序不可读了
    kran
        12
    kran  
       2013-08-29 13:29:30 +08:00   ❤️ 4
    x = x+1;
    我擦, 这是沈麻?怎么可能!
    lichao
        13
    lichao  
       2013-08-29 13:30:19 +08:00
    @kran 哈哈
    timonwong
        14
    timonwong  
       2013-08-29 13:33:09 +08:00
    @kran
    Brilliant!
    kurtis
        15
    kurtis  
       2013-08-29 14:17:48 +08:00   ❤️ 1
    我打算开发一种跨时代的新编程语言,取名“点点”,特征之一如下,希望大家投资我开发。

    a = [2,4,6,8 ...];

    b = random in [2,3,5,7,11 ...];

    c = 3; d=4; e=...; f=...;


    if (b in a) { log("b is even");} else {...}
    if (c in a) ...
    ...
    tititake
        16
    tititake  
       2013-08-29 14:27:41 +08:00
    public static boolean checkThis(String... strings)
    sdjl
        17
    sdjl  
       2013-08-29 14:32:30 +08:00
    javascript 闭包
    SErHo
        18
    SErHo  
       2013-08-29 14:38:05 +08:00
    int x = 8
    while (x-->0) {
    hehe(x);
    }
    messense
        19
    messense  
       2013-08-29 15:33:14 +08:00 via iPhone
    .NET 的 Linq
    min
        20
    min  
       2013-08-29 16:27:54 +08:00
    是啊linq那一系列的东西都很难理解的感觉
    msg7086
        21
    msg7086  
       2013-08-29 16:30:42 +08:00
    LINQ碉堡
    cxh116
        22
    cxh116  
       2013-08-29 16:32:14 +08:00   ❤️ 1
    ruby
    obj = Object.new
    def obj.hello
    puts "hello world"
    end
    obj.hello

    另外楼主提到的try方法是rails的猴子补丁
    fl3x
        23
    fl3x  
       2013-08-29 16:37:42 +08:00   ❤️ 1
    InvokeCode= (fun args -> <@@ (%%(args.[0]) : string) :> obj @@>))

    是要有多囧才能发明<@@ @@>这种东西。。。
    fangzhzh
        24
    fangzhzh  
       2013-08-29 18:55:32 +08:00 via Android
    object-c block
    lisp )))))))))))()((
    moplay
        25
    moplay  
       2013-08-29 19:05:29 +08:00
    """say
    "hello world"
    """"
    Sdhjt
        26
    Sdhjt  
       2013-08-29 19:40:19 +08:00
    C语言:
    (*(void(*)())0)();
    yanng
        27
    yanng  
       2013-08-29 19:40:55 +08:00
    //用完我会关闭
    defer f.Close()

    //我俩并发执行
    go sum(values[:len(values)/2], resultChan)
    go sum(values[len(values)/2:], resultChan)
    beordle
        28
    beordle  
       2013-08-29 19:44:32 +08:00
    @kurtis
    sethverlo
        29
    sethverlo  
    OP
       2013-08-30 09:08:26 +08:00
    @yanng 这是 Go 语言?
    Mutoo
        30
    Mutoo  
       2013-08-30 09:21:15 +08:00
    mov ax 4c00h
    int 21h
    ugoa
        31
    ugoa  
       2013-08-30 09:47:16 +08:00   ❤️ 1
    Ruby:

    7.days.ago
    sethverlo
        32
    sethverlo  
    OP
       2013-08-30 10:05:10 +08:00
    @ugoa 赞这个
    hazard
        33
    hazard  
       2013-08-30 10:06:40 +08:00   ❤️ 1
    中文编程...
    dndx
        34
    dndx  
       2013-08-30 10:11:21 +08:00
    C:

    int some_shit[10];

    some_shit[20] = 100;
    sethverlo
        35
    sethverlo  
    OP
       2013-08-30 10:21:53 +08:00
    @dndx 被惊呆了……
    chmlai
        36
    chmlai  
       2013-08-30 10:35:09 +08:00
    objc block吧
    fate
        37
    fate  
       2013-08-30 11:10:02 +08:00
    }}}}}}}}}}}}}}}}}}
    yaroot
        38
    yaroot  
       2013-08-30 11:15:10 +08:00
    scala的类型系统, kinds(高阶泛型)
    y combinator的推断(lambda calculus)
    s-expressions

    其他还有很多..erlang里的=, process和其他特性

    另, lz python例子里2和3大体上是一样的吧
    sethverlo
        39
    sethverlo  
    OP
       2013-08-30 11:25:33 +08:00
    @yaroot 没用过 python3。。
    mengzhuo
        40
    mengzhuo  
       2013-08-30 11:26:17 +08:00
    竟然没有人说Python的操作符重载……简直是神一样的存在
    celon
        41
    celon  
       2013-08-30 11:27:34 +08:00
    直接用Java代码去操纵一个class的字节码,改变行为。
    angelface
        42
    angelface  
       2013-08-30 11:32:54 +08:00
    @mengzhuo 和ruby的一比,就不神了。
    timonwong
        43
    timonwong  
       2013-08-30 11:36:28 +08:00
    @mengzhuo
    Welcome to the Scala world...

    还有两个C++反例:
    boost.spirit
    boost.xpressive
    yaroot
        44
    yaroot  
       2013-08-30 11:42:16 +08:00
    @sethverlo

    2. return a, b, c

    3. a, b = b, a

    我说这2个特性是一样的..
    sethverlo
        45
    sethverlo  
    OP
       2013-08-30 11:49:39 +08:00
    @yaroot 当然不一样啊…

    def foo(): return a, b, c

    然后就可以 a, b, c = foo()
    yaroot
        46
    yaroot  
       2013-08-30 11:53:04 +08:00
    @sethverlo 都是tuple
    sethverlo
        47
    sethverlo  
    OP
       2013-08-30 11:53:40 +08:00
    @yaroot 这么说的话确实是……
    mengzhuo
        48
    mengzhuo  
       2013-08-30 14:43:22 +08:00
    @angelface

    Ruby也有+-<> in with 重载?连iter对象都可以重载?

    大Python还有groupby,OTZ不得不再拜一下。
    mengzhuo
        49
    mengzhuo  
       2013-08-30 14:46:53 +08:00
    @angelface 看了一下,也可以,只是程序可读性下降得厉害啊

    def *

    这个……
    plprapper
        50
    plprapper  
       2013-08-30 16:09:07 +08:00
    @zencoding a:b?c 这个。。。 是a?b:c 吧
    tioover
        51
    tioover  
       2013-08-30 16:51:45 +08:00
    Y组合子和meta programming
    angelface
        52
    angelface  
       2013-08-30 17:17:24 +08:00
    @mengzhuo 还好吧, 还可以def >> def ]] def [] def + def .....
    mouer
        53
    mouer  
       2013-08-30 18:10:37 +08:00
    haskell 斐波那契数列 fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2583 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:33 · PVG 09:33 · LAX 18:33 · JFK 21:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.