[ruby-core:99789] [Ruby master Feature#16746] Endless method definition
From:
mame@...
Date:
2020-08-31 08:19:15 UTC
List:
ruby-core #99789
Issue #16746 has been updated by mame (Yusuke Endoh).
In the previous dev-meeting, matz said that it should be prohibited to define setter method with endless definition.
```ruby
# prohibited
def foo=(x) = @x = x
```
There are two reasons:
1. This code is very confusing and it is not supposed that a destructive operation is defined in this style.
2. We want to allow `def foo=42` as `def foo() = 42` in future. It is difficult to implement it in short term, though. If `def foo=(x) = @x = x` is allowed once, it will become more difficult.
I will create a PR soon.
----------------------------------------
Feature #16746: Endless method definition
https://bugs.ruby-lang.org/issues/16746#change-87305
* Author: mame (Yusuke Endoh)
* Status: Closed
* Priority: Normal
* Assignee: nobu (Nobuyoshi Nakada)
----------------------------------------
Ruby syntax is full of "end"s. I'm paranoid that the ends end Ruby. I hope Ruby is endless.
So, I'd like to propose a new method definition syntax.
```ruby
def: value(args) = expression
```
As you see, there is no "end".
Examples.
```ruby
def: hello(name) =
puts("Hello, #{ name }")
hello("endless Ruby") #=> Hello, endless Ruby
```
```ruby
def: inc(x) = x + 1
p inc(42) #=> 43
```
```ruby
x = Object.new
def: x.foo = "FOO"
p x.foo #=> "FOO"
```
```ruby
def: fib(x) =
x < 2 ? x : fib(x-1) + fib(x-2)
p fib(10) #=> 55
```
Limitations.
* `def: foo x = x` is invalid; the parentheses for formal arguments are mandatory.
* `private def: foo = x` is invalid; this method definition cannot be an method argument.
A patch is attached. No conflicts.
---Files--------------------------------
endless-method-definition.patch (2.47 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>