5 ms·
If you can read Python you can almost read Ruby code
by Madeindjs 8y ago
If you can read Python you can almost read Ruby code
- kccqzy 8y agoRuby has blocks. Python does not. And Ruby blocks are very extensively used.
- deleted 8y ago[deleted]
- localhostdotdev 8y agoblocks are the same as passing a function or a lambda in python: [1, 2, 3].map { |i| i + 1 } [i + 1 for i in [1, 2, 3]] def plus(i): return i + 1 map(plus, [1, 2, 3]) map(lambda i: i + 1, [1, 2, 3])
- kccqzy 8y agoFar from it. Ruby blocks aren't really lambdas or anonymous functions. For example when you use return inside a block, it's not just the code in the block is being returned, but the whole enclosing function. And, you don't really "call" a block but yield to it. It's not even an object that you can inspect. It's syntax. It's really a new kind of control structure. Ruby blocks have few equivalents in other languages.
- localhostdotdev 8y agodef f(&block) block.class end f { } # => Proc f(&-> { }) # => Proc f(&lambda { }) # => Proc f(&:something) # => Proc lambda { }.class # => Proc (I think you get the idea) method(:f).class # => Method lambda { |i| i + 1 }.call(10) # => 11 you don't typically return in a block, there is implicit return. you would do "next" or "break" depending on what you want to achieve. as far as I know that's the main difference between procs and methods. (not that anybody would do what I do, most people just use blocks, some people use yield, few people use the &block argument, but that's exactly the same)
- ptx 7y agoSound a lot like inlined lambdas in Kotlin. Lambdas can be passed with the same block-like syntax, and when they're marked as "inline" you can return from the enclosing function from within the lambda (because the lambda will have its body inlined by the compiler).