问题标签 [ruby]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 用动态语言实现访问者模式的首选方式?
作为我自己的练习,我正在将一个示例程序翻译成各种语言。从 C# 开始,我有一个访问者模式界面,如下所示:
转向 ruby(或 python,或其他),我不再根据类型从编译器获得调度。我应该在访客本身中进行调度吗?
或者我应该在房间的不同专业中进行调度:
或者是否有另一个在动态语言中使用的首选习语?
ruby-on-rails - 如何测试从控制台登录的 Rails?
我花了很长时间弄清楚如何使用 Rails 的响应对象登录和注销。标准的博客还可以,但我终于诊断出来了,我想在这里记录一下。
请注意,以上暗示您在身份验证请求失败后重定向,并且您在登录后重定向。
为确保将固定装置加载到测试环境数据库中(通常在 rake 测试期间发生),请确保执行以下操作:
(来自 Patrick Richie)默认 URL 将显示为“www.example.com”,因为此默认主机在 ActionController::Integration::Session 中设置
它在 actionpack/lib/action_controller/integration.rb#75 中设置
要在集成测试中更改它,请执行以下操作:
ruby - 为什么 Ruby setter 需要“自我”。班级内的资格?
Ruby setter——无论是由其创建还是手动创建——似乎是在类本身中访问时(c)attr_accessor
唯一需要限定的方法。self.
这似乎使 Ruby 在语言世界中独树一帜:
- 所有方法都需要
self
/this
(比如 Perl,我认为是 Javascript) - 没有方法需要
self
/this
is (C#, Java) - 只有二传手需要
self
/this
(Ruby?)
最好的比较是 C# 与 Ruby,因为这两种语言都支持访问器方法,这些方法在语法上就像类实例变量一样工作:foo.x = y
, y = foo.x
. C# 称它们为属性。
这是一个简单的例子;Ruby 和 C# 中的相同程序:
带走self.qwerty =()
它会失败(Linux 和 OS X 上的 Ruby 1.8.6)。现在 C#:
问:这是真的吗?除了 setter 之外,还有其他需要 self 的场合吗?即,是否存在其他情况下不能在没有self的情况下调用Ruby 方法?
当然有很多情况下 self变得必要。这不是 Ruby 独有的,只是为了清楚:
同样的歧义以同样的方式解决。但是,虽然我问的是微妙的情况
- 已经定义了一个方法,并且
- 没有定义局部变量,并且
我们遇到
这是模棱两可的——这是一个方法调用还是一个新的局部变量赋值?
@迈克·斯通
你好!我理解并欣赏你提出的观点,你的例子很棒。相信我,如果我有足够的声誉,我会投票赞成你的回应。然而我们仍然不同意:
- 在语义问题上,以及
- 在一个事实的中心点上
首先,我声称,并非没有讽刺意味,我们正在就“歧义”的含义进行语义辩论。
当谈到解析和编程语言语义(这个问题的主题)时,你肯定会承认“歧义”这个概念的广泛范围。让我们采用一些随机符号:
- ambiguous:词汇歧义(lex must 'look ahead')
- 歧义:语法歧义(yacc 必须遵循解析树分析)
- AMBIGUOUS:歧义在执行的那一刻知道一切
(而且 2-3 之间也有垃圾)。所有这些类别都是通过收集更多的上下文信息来解决的,越来越全球化。所以当你说,
当没有定义变量时,“qwerty = 4”在 C# 中是 UNAMBIGUOUS...
我完全同意。但出于同样的原因,我要说
“qwerty = 4”在红宝石中是不明确的(因为它现在存在)
“qwerty = 4”在 C# 中是不明确的
而且我们还没有互相矛盾。最后,这是我们真正不同意的地方:如果没有任何进一步的语言结构,ruby 可以或不能实现,例如,
对于“qwerty = 4”,如果没有定义局部变量,ruby UNAMBIGUOUSLY 会调用现有的 setter
你说不。我说是; 另一个 ruby 可能存在,它在各个方面的行为都与当前完全相同,除了“qwerty = 4”在不存在 setter 和 local 时定义了一个新变量,如果存在则调用 setter,如果存在则分配给 local。我完全接受我可能是错的。事实上,我可能错的原因会很有趣。
让我解释。
想象一下,您正在编写一种新的 OO 语言,其访问器方法看起来像实例变量(如 ruby 和 C#)。您可能会从概念语法开始,例如:
但是解析器编译器(甚至不是运行时)会呕吐,因为即使在所有输入都被摸索之后,也无法知道哪种语法是相关的。你面临着哪一个经典的选择。我不能确定细节,但基本上 ruby 是这样做的:
这就是为什么它不模棱两可,而 C# 这样做:
对于 C#,“稍后”仍处于编译时。
我确信 ruby 可以做同样的事情,但“稍后”必须在运行时,因为正如本指出的那样,在执行语句之前你不知道哪种情况适用。
我的问题从来没有打算意味着“我真的需要'自我'吗?” 或“正在避免什么潜在的歧义?” 相反,我想知道为什么会做出这个特殊的选择?也许这不是表演。也许它刚刚完成了工作,或者认为最好始终允许 1-liner local 覆盖方法(非常罕见的情况要求)......
但我有点建议,最动态的语言可能是推迟这个决定最长的语言,并根据最上下文信息选择语义:所以如果你没有本地并且你定义了一个 setter,它将使用 setter . 这难道不是我们喜欢 ruby、smalltalk、objc 的原因吗,因为方法调用是在运行时决定的,提供了最大的表现力?
ruby-on-rails - 向 Rails 添加功能
我正在开发一个 Rails 应用程序,并希望从我询问的“在 Ruby on Rails 中获取主机名或 IP ”中包含一些功能。
我在让它工作时遇到问题。我的印象是我应该在 lib 目录中创建一个文件,所以我将它命名为“get_ip.rb”,内容如下:
我也尝试过将 GetIP 定义为一个类,但是当我执行通常的操作时ruby script/console
,我根本无法使用该local_ip
方法。有任何想法吗?
ruby-on-rails - 将数据从 Ruby on Rails 应用程序传递到 Flex 图表的最佳方式是什么?
有很多方法可以将数据从 Rails 应用程序传递到 Flex 二进制文件。现在,我正在使用带有 xml.erb 模板的旧 e4x resultFormat。我以前做过 AMF,但我觉得将参数内联到嵌入本身是一个更好的解决方案,因为您不必等待浏览器加载 swf 二进制文件和二进制文件来发出 Web 请求。
考虑到所有这些,如今使用 Rails 后端渲染 Flex 小部件的最佳实践是什么?
ruby-on-rails - 最佳 Ruby on Rails 社交网络框架
我正计划使用 Ruby on Rails 创建一个社交网络 + MP3 讲座下载/浏览/评论/发现网站。部分是为了好玩,也是学习一些 Ruby on Rails 的一种方式。我正在寻找一个可以用作我的网站基础的社交网络框架。我不想重新发明轮子。
在网上搜索我发现了三个这样的框架。您会推荐使用这三个中的哪一个,为什么?
ruby - 红宝石方法名称
对于我正在使用 ruby 进行的项目,我将覆盖 method_missing 方法,以便我可以使用这样的方法调用设置变量,类似于在 ActiveRecord 对象中设置变量:
Object.variable_name= 'new value'
然而,在实现这个之后,我发现许多变量名中都有句点 (.)。我找到了这个解决方法:
Object.send('variable.name=', 'new value')
但是,我想知道有没有办法逃脱这个时期,这样我就可以使用
Object.variable.name= 'new value'
ruby - Ruby 中的安全整数解析
我有一个字符串,比如说'123'
,我想将它转换为整数123
。
我知道你可以简单地做some_string.to_i
,但这会转换'lolipops'
为0
,这不是我想要的效果。当我尝试转换无效的东西时,我希望它在我的脸上炸开,带有美好而痛苦的Exception
. 否则,我无法区分有效0
和根本不是数字的东西。
编辑:我正在寻找没有正则表达式技巧的标准方法。
ruby - 在 Ruby 中引发异常与抛出异常有什么区别?
Ruby 有两种不同的异常机制:Throw/Catch 和 Raise/Rescue。
为什么我们有两个?
什么时候应该使用一个而不是另一个?
ruby-on-rails - 在 Rails 2.1.x 中处理 RoutingError 的最佳方法?
我正在使用 Rails 2.1 中的 routing.rb 代码,并试图让它达到我可以对找不到适当路径时抛出的 RoutingError 异常做一些有用的事情的地步。
这是一个有点棘手的问题,因为有些类型的 URL 只是简单的 BAD:/azenv.php 机器人攻击,在 URL 中键入 /bar/foo/baz 的人,等等......我们不想要那。
然后是微妙的路由问题,我们确实希望收到通知:例如 /artists/ 或 ///。在这些情况下,我们可能希望或不抛出错误......或者我们让 Google 向我们发送过去有效但不再是因为人们删除它们的 URL。
在每种情况下,我都想要一种方法来包含、分析和过滤我们返回的路径,或者至少是某种 Railsy 方法来管理通过正常的“fallback catchall”url 的路由。这存在吗?
编辑:
所以这里的代码是:
所以我们最好的选择是覆盖 log_error(exception) 以便我们可以根据异常过滤掉异常。所以在 ApplicationController
在我们需要不同的控制器逻辑、路由等的地方添加额外的逻辑。