From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on starla X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 Received: from nue.mailmanlists.eu (nue.mailmanlists.eu [94.130.110.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id CD47C1F4CC for ; Mon, 23 Dec 2024 03:38:17 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=pass (1024-bit key; unprotected) header.d=ml.ruby-lang.org header.i=@ml.ruby-lang.org header.a=rsa-sha256 header.s=mail header.b=Vyl3xeea; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.a=rsa-sha256 header.s=s1 header.b=DwTdHd0A; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ml.ruby-lang.org; s=mail; t=1734925065; bh=XS/wAwo76U9ua67p4QRK0SibFbqEz78MFZUZIqAqR1c=; h=Date:References:To:Reply-To:Subject:List-Id:List-Archive: List-Help:List-Owner:List-Post:List-Subscribe:List-Unsubscribe: From:Cc:From; b=Vyl3xeea6ToSAkgpbqTc2hU7qN1B2h00kabt7FJ9eWEYPWfCJuvyUWUFWn77CSbUE 8iMtvJCiZmOsfTD8sUh5PyvIQ7wRfqIqj00gMz4axozzAxndbXxAmdgguBiUpSO+8W y7tSVS7Tkk1rlyRBJK3iksIKDQPN/UJqUOj4UEao= Received: from nue.mailmanlists.eu (localhost [IPv6:::1]) by nue.mailmanlists.eu (Postfix) with ESMTP id 9250345F42 for ; Mon, 23 Dec 2024 03:37:45 +0000 (UTC) Authentication-Results: nue.mailmanlists.eu; dkim=pass (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.a=rsa-sha256 header.s=s1 header.b=DwTdHd0A; dkim-atps=neutral Received: from s.wfbtzhsv.outbound-mail.sendgrid.net (s.wfbtzhsv.outbound-mail.sendgrid.net [159.183.224.104]) by nue.mailmanlists.eu (Postfix) with ESMTPS id 86CB644CD5 for ; Mon, 23 Dec 2024 03:37:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc:content-type:from:subject:to; s=s1; bh=PYcE+4O6SHNfIWz/xjbsC/CgaUO8MJP+WpdGdY33rig=; b=DwTdHd0ATeJWHnRZb8OkQkkD91WrxInGSeSuoabPpZM0EOYzthbIFZmDcNMEVCH6djcw R+PN9Nsa9AjgSIEroYuWIaMMge/smJUhLl5mYTXNk4JvQcaN37d0fdf8FUEku2q+ssFChk AsHIC5Hn6UUzq/lsaBvkU0zJwjM366OIcXkHMPdEGVI6xDA4mPXPiAw4Za/xV5GeStT5Pc DoHfhz8acyzhpT0lHgVY1GLahvWzOcyVEr6LNfSjusUbIw0ElYs/eB8JU1MBbED2nRQtqs VqXvt9sjzAsxsuQRy0moF/zYzSRe4LYGPmnCuAGBoibz0aeJBTYFcEQv1J2Z4qOg== Received: by recvd-canary-7b78648f67-9j4wh with SMTP id recvd-canary-7b78648f67-9j4wh-1-6768DB03-4 2024-12-23 03:37:39.507205663 +0000 UTC m=+3313778.765798546 Received: from herokuapp.com (unknown) by geopod-ismtpd-7 (SG) with ESMTP id f8OJVZJNRBS5riXQi9Herg for ; Mon, 23 Dec 2024 03:37:39.416 +0000 (UTC) Date: Mon, 23 Dec 2024 03:37:39 +0000 (UTC) Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Bug X-Redmine-Issue-Id: 20965 X-Redmine-Issue-Author: zverok X-Redmine-Issue-Priority: Normal X-Redmine-Sender: mame X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 97046 X-SG-EID: =?us-ascii?Q?u001=2Ep+ckLDtT+4Y5c+H0YCkEnsuWiCQmn3OZA=2F9FzjoR6ZZlPaMv54M7EFoSM?= =?us-ascii?Q?CX5Trc79ep2R5F+0oYS4n23jq1cv=2FD=2FuCaoVj4N?= =?us-ascii?Q?f=2FlM0kOv2hZrH59taVaoWlWVMf1yx2UMC3AbkPJ?= =?us-ascii?Q?ztLl58ro9aUDGpfe0OZK=2FikYceymGAKshRakG2m?= =?us-ascii?Q?Bt5Vcx63R6eMDc4IHMdYs+9ezNw4=2F1ckVBV0RB=2F?= =?us-ascii?Q?JJ=2FapYgj3jeZgFyXXbzOeQKAUUoJe9crgcBIE+E?= =?us-ascii?Q?XAlv1FvJY7pmQUFnTGl7wJ6HGQ=3D=3D?= To: ruby-core@ml.ruby-lang.org X-Entity-ID: u001.I8uzylDtAfgbeCOeLBYDww== Message-ID-Hash: RTV2Z5KHNCYWP4OW6SBF3JVCLAZN4BTA X-Message-ID-Hash: RTV2Z5KHNCYWP4OW6SBF3JVCLAZN4BTA X-MailFrom: bounces+313651-b711-ruby-core=ml.ruby-lang.org@em5188.ruby-lang.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list Reply-To: Ruby developers Subject: [ruby-core:120369] [Ruby master Bug#20965] `it` vs `binding.local_variables` List-Id: Ruby developers Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: "mame (Yusuke Endoh) via ruby-core" Cc: "mame (Yusuke Endoh)" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Issue #20965 has been updated by mame (Yusuke Endoh). Status changed from Closed to Open Let's revert this change. Below is our local discussion of this issue with @nobu and @ko1. First, consider the following example. ```ruby "foo".tap do it "bar".tap do p eval("it") # what should happen? end end ``` There are three possible options. 1. Raises an exeption 2. Returns `"bar"` 3. Returns `"foo"` 1 is the only realistic choice. 2 would require keeping all arguments conservatively even when `it` does not appear lexically, which we want to avoid for a performance reason (including the possibility of future optimizations, as @ko1 said). 3 is clearly counterintuitive. Then, consider the following example. ```ruby "foo".tap do it "bar".tap do p binding.local_variables #=> []? [:it]? eval("it") end end ``` If `local_variables` contains `:it`, `eval("it")` is expected to return some value. However, it is impossible for the reason above. Therefore, `local_variables` should return `[]`. The difference between `_1` and `it` is that `_1` is prohibited to be referenced outside of a block, while `it` is not. Note that if `it` is defined as an ordinary local variable by an assignment, `local_variables` should contain `:it`. ---------------------------------------- Bug #20965: `it` vs `binding.local_variables` https://bugs.ruby-lang.org/issues/20965#change-111145 * Author: zverok (Victor Shepelev) * Status: Open * ruby -v: ruby 3.4.0dev (2024-12-15T13:36:38Z master 366fd9642f) +PRISM [x86_64-linux] * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- `it` is not available in the list of `binding.local_varaibles`, **unlike** numbered parameters: ```ruby p(proc { binding.local_variables }.call) # [] p(proc { |x| binding.local_variables }.call) # [:x] p(proc { _1; binding.local_variables }.call) # [:_1] p(proc { vars = binding.local_variables; _1; vars }.call) # [:_1, :vars] p(proc { it; binding.local_variables }.call) # [] ``` I wonder if it is deliberate or accidental. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/