当我说{ :bla => 1, :bloop => 2 },究竟是:做什么的?我在某处读到了它与字符串的相似之处,但不知何故是一个符号.
我对这个概念不是很清楚,有人可以启发我吗?
尽管阅读了" 理解Ruby符号 ",但在使用符号时,我仍然对内存中数据的表示感到困惑.如果一个符号(其中两个包含在不同的对象中)存在于同一个内存位置,那么它们如何包含不同的值?我原本期望相同的内存位置包含相同的值.
这是来自链接的引用:
与字符串不同,同名的符号在ruby会话期间初始化并仅存在于内存中一次
我不明白它如何设法区分同一内存位置中包含的值.
考虑这个例子:
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
Run Code Online (Sandbox Code Playgroud)
patient1并且patient2都是哈希,这很好. :ruby然而是一个象征.如果我们要输出以下内容:
patient1.each_key {|key| puts key.to_s}
Run Code Online (Sandbox Code Playgroud)
然后将输出什么?"red",还是"programming"?
忘记哈希一秒钟,我认为符号是一个指向值的指针.我的问题是:
我曾经更像是一个业余爱好的Java人,现在尝试切换到Ruby on Rails.但是我有一些困难,信不信由你,我喜欢大括号和分号......给一些方向.
但问题是:现在我正在参加RoR的在线课程,它发生在我身上,我对如何使用符号,哈希等问题总是错误的.
示例1:让我们看一下这一行代码,例如:
form_for(:session, :html => {class: "form-horizontal", role: "form"}, url: login_path)
Run Code Online (Sandbox Code Playgroud)
这就是我读它的方式:
方法/函数名称是
form_for
Run Code Online (Sandbox Code Playgroud)
解析为此方法的参数是:
:session, :html => {class: "form-horizontal", role: "form"}, url: login_path
Run Code Online (Sandbox Code Playgroud)
让我们把它分解成
:session
:html => {class: "form-horizontal", role: "form"}
url: login_path
Run Code Online (Sandbox Code Playgroud)
我该怎么知道如何申报这些参数?为什么:session和:html passend作为键和url而不是?:html符号是Hashmap符号吗?
在模型文件中,您声明这样的n:m关系(例如用户< - >股票)
has_many :users, through: :user_stocks
Run Code Online (Sandbox Code Playgroud)
好吧,我得到的第一个参数是:用户和第二个是相同的
:through => :user_stocks
Run Code Online (Sandbox Code Playgroud)
正确?
但是以同样的方式,让我们看看同一个项目中的routes.rb配置:
resources :user_stocks, except: [:show, :edit, :update]
Run Code Online (Sandbox Code Playgroud)
现在我们在except hash上使用一组键,对吗?在写一个问题时它确实更清楚但是,是否有关于何时使用的经验法则
:name
name: value
:name => {values}?
name: [values]
Run Code Online (Sandbox Code Playgroud)
或者这仅仅是个人偏好?在这种情况下,我希望我的在线教师保持一致..
一般来说,我对参数语法约定是如何以及何时使用什么(什么类型的参数)感到困惑.是因为我是从Ruby开始还是我错过了一些约定.
我希望我的问题是可以理解的,并原谅我的英语 - 非母语人士.我真的很想和RoR相处,但是现在看在线课程有时让我比以前更加困惑,因为如果我自己完成它,我会用完全不同的方式.