问题标签 [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.

0 投票
2 回答
885 浏览

c# - 用动态语言实现访问者模式的首选方式?

作为我自己的练习,我正在将一个示例程序翻译成各种语言。从 C# 开始,我有一个访问者模式界面,如下所示:

转向 ruby​​(或 python,或其他),我不再根据类型从编译器获得调度。我应该在访客本身中进行调度吗?

或者我应该在房间的不同专业中进行调度:

或者是否有另一个在动态语言中使用的首选习语?

0 投票
1 回答
1517 浏览

ruby-on-rails - 如何测试从控制台登录的 Rails?

我花了很长时间弄清楚如何使用 Rails 的响应对象登录和注销。标准的博客还可以,但我终于诊断出来了,我想在这里记录一下。

请注意,以上暗示您在身份验证请求失败后重定向,并且您在登录后重定向。

为确保将固定装置加载到测试环境数据库中(通常在 rake 测试期间发生),请确保执行以下操作:

(来自 Patrick Richie)默认 URL 将显示为“www.example.com”,因为此默认主机在 ActionController::Integration::Session 中设置

它在 actionpack/lib/action_controller/integration.rb#75 中设置

要在集成测试中更改它,请执行以下操作:

0 投票
3 回答
10006 浏览

ruby - 为什么 Ruby setter 需要“自我”。班级内的资格?

Ruby setter——无论是由其创建还是手动创建——似乎是在类本身中访问时(c)attr_accessor唯一需要限定的方法。self.这似乎使 Ruby 在语言世界中独树一帜:

  • 所有方法都需要self/ this(比如 Perl,我认为是 Javascript)
  • 没有方法需要self/ thisis (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 独有的,只是为了清楚:

同样的歧义以同样的方式解决。但是,虽然我问的是微妙的情况

  • 已经定义了一个方法,并且
  • 没有定义局部变量,并且

我们遇到

这是模棱两可的——这是一个方法调用还是一个新的局部变量赋值?


@迈克·斯通

你好!我理解并欣赏你提出的观点,你的例子很棒。相信我,如果我有足够的声誉,我会投票赞成你的回应。然而我们仍然不同意:

  • 在语义问题上,以及
  • 在一个事实的中心点上

首先,我声称,并非没有讽刺意味,我们正在就“歧义”的含义进行语义辩论。

当谈到解析和编程语言语义(这个问题的主题)时,你肯定会承认“歧义”这个概念的广泛范围。让我们采用一些随机符号:

  1. ambiguous:词汇歧义(lex must 'look ahead')
  2. 歧义:语法歧义(yacc 必须遵循解析树分析)
  3. 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 的原因吗,因为方法调用是在运行时决定的,提供了最大的表现力?

0 投票
3 回答
1011 浏览

ruby-on-rails - 向 Rails 添加功能

我正在开发一个 Rails 应用程序,并希望从我询问的“在 Ruby on Rails 中获取主机名或 IP ”中包含一些功能。

我在让它工作时遇到问题。我的印象是我应该在 lib 目录中创建一个文件,所以我将它命名为“get_ip.rb”,内容如下:

我也尝试过将 GetIP 定义为一个类,但是当我执行通常的操作时ruby script/console,我根本无法使用该local_ip方法。有任何想法吗?

0 投票
3 回答
937 浏览

ruby-on-rails - 将数据从 Ruby on Rails 应用程序传递到 Flex 图表的最佳方式是什么?

有很多方法可以将数据从 Rails 应用程序传递到 Flex 二进制文件。现在,我正在使用带有 xml.erb 模板的旧 e4x resultFormat。我以前做过 AMF,但我觉得将参数内联到嵌入本身是一个更好的解决方案,因为您不必等待浏览器加载 swf 二进制文件和二进制文件来发出 Web 请求。

考虑到所有这些,如今使用 Rails 后端渲染 Flex 小部件的最佳实践是什么?

0 投票
9 回答
38476 浏览

ruby-on-rails - 最佳 Ruby on Rails 社交网络框架

我正计划使用 Ruby on Rails 创建一个社交网络 + MP3 讲座下载/浏览/评论/发现网站。部分是为了好玩,也是学习一些 Ruby on Rails 的一种方式。我正在寻找一个可以用作我的网站基础的社交网络框架。我不想重新发明轮子。

在网上搜索我发现了三个这样的框架。您会推荐使用这三个中的哪一个,为什么?

http://portal.insoshi.com/

http://www.communityengine.org/

http://lovdbyless.com/

0 投票
3 回答
2914 浏览

ruby - 红宝石方法名称

对于我正在使用 ruby​​ 进行的项目,我将覆盖 method_missing 方法,以便我可以使用这样的方法调用设置变量,类似于在 ActiveRecord 对象中设置变量:

Object.variable_name= 'new value'

然而,在实现这个之后,我发现许多变量名中都有句点 (.)。我找到了这个解决方法:

Object.send('variable.name=', 'new value')

但是,我想知道有没有办法逃脱这个时期,这样我就可以使用

Object.variable.name= 'new value'

0 投票
8 回答
93768 浏览

ruby - Ruby 中的安全整数解析

我有一个字符串,比如说'123',我想将它转换为整数123

我知道你可以简单地做some_string.to_i,但这会转换'lolipops'0,这不是我想要的效果。当我尝试转换无效的东西时,我希望它在我的脸上炸开,带有美好而痛苦的Exception. 否则,我无法区分有效0和根本不是数字的东西。

编辑:我正在寻找没有正则表达式技巧的标准方法。

0 投票
3 回答
52884 浏览

ruby - 在 Ruby 中引发异常与抛出异常有什么区别?

Ruby 有两种不同的异常机制:Throw/Catch 和 Raise/Rescue。

为什么我们有两个?

什么时候应该使用一个而不是另一个?

0 投票
2 回答
2024 浏览

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

在我们需要不同的控制器逻辑、路由等的地方添加额外的逻辑。