Issue #15824 has been updated by wanabe (_ wanabe).


The implementation can be very simple.
(I don't know whether `NODE_METHREF` is suitable.)

```diff
diff --git a/compile.c b/compile.c
index 7a88f81daa..f6eafb0ac2 100644
--- a/compile.c
+++ b/compile.c
@@ -5888,6 +5888,11 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c
         ADD_LABEL(ret, fin);
         break;
       }
+      case NODE_METHREF: {
+        ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid));
+        ADD_SEND(ret, line, idRespond_to, INT2FIX(1));
+        break;
+      }
       default:
         UNKNOWN_NODE("NODE_IN", node, COMPILE_NG);
     }
diff --git a/parse.y b/parse.y
index 287704e14f..dd305479f5 100644
--- a/parse.y
+++ b/parse.y
@@ -3904,6 +3904,10 @@ p_expr_basic     : p_value
                    {
                        $$ = $2;
                    }
+                | '.' operation2
+                    {
+                       $$ = NEW_METHREF(Qundef, $2, &@$);
+                    }
                ;
 
 p_args         : p_expr
```

By the way, missing "& pattern" seems to be intended. see [ruby-core:88036] https://bugs.ruby-lang.org/issues/14912#note-7 .



----------------------------------------
Feature #15824: respond_to pattern for pattern match
https://bugs.ruby-lang.org/issues/15824#change-81917

* Author: fukajun (Jun Fukaya)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
rubyに追加されそうなパターンマッチの機能について...
Interger, Array など constantを書くことで、オブジェクトのクラスにマッチングさせる機能があるのを拝見しました。
duck typingを確認するようなパターンマッチがかけるとrubyらしいのではないかと思ってこちらに書いてみることにしました。

respond_to pattern

```ruby
class Runner
  def run
  end

  def stop
  end
end

runner = Runner.new
case runner
in .run & .stop
  :reachable
in .start & .stop
  :unreachable
end 
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>