来聊聊编程语言中那些让你觉得被惊呆了的特性 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sethverlo
V2EX    问与答

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

  •  
  •   sethverlo 2013-08-29 12:05:16 +08:00 5657 次点击
    这是一个创建于 4456 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    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     Solana     5071 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:38 PVG 17:38 LAX 01:38 JFK 04:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86